Radi se o tome da ja imam web service napisan u c# 2.0 sa jednom metodom koju jedan moj klijent poziva koristeci Cast Iron. Wsdl izgleda ovako:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns="http://xxxx.com/" xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
targetNamespace="http://xxxx.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://xxxx.com/">
<s:element name="AUXTableAdministration">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="userName" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="password" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="action" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="tableName" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="xDoc" type="tns:InsertUpdateDeleteRowsRequest"/>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="InsertUpdateDeleteRowsRequest">
<s:sequence>
<s:element name="Root">
<s:complexType>
<s:sequence>
<s:element maxOccurs="1" minOccurs="1" name="Columns">
<s:complexType>
<s:sequence>
<s:element maxOccurs="unbounded" minOccurs="1" name="Column" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element maxOccurs="1" minOccurs="1" name="Rows">
<s:complexType>
<s:sequence>
<s:element maxOccurs="unbounded" minOccurs="1" name="Row">
<s:complexType>
<s:sequence>
<s:element maxOccurs="unbounded" minOccurs="1" name="Value" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
<s:element name="AUXTableAdministrationResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="AUXTableAdministrationResult" type="tns:InsertUpdateDeleteRowsResponse"/>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="InsertUpdateDeleteRowsResponse">
<s:sequence>
<s:element name="Result">
<s:complexType>
<s:sequence>
<s:element name="Status" type="tns:oknok" maxOccurs="1" minOccurs="1" />
<s:element name="InsertedId" type="s:integer" maxOccurs="1" minOccurs="1" />
<s:element name="Message" type="s:string" maxOccurs="1" minOccurs="1" />
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
<s:simpleType name="oknok">
<s:restriction base="s:string">
<s:enumeration value="OK" />
<s:enumeration value="NOK" />
</s:restriction>
</s:simpleType>
</s:schema>
</wsdl:types>
<wsdl:message name="AUXTableAdministrationSoapIn">
<wsdl:part name="parameters" element="tns:AUXTableAdministration"/>
</wsdl:message>
<wsdl:message name="AUXTableAdministrationSoapOut">
<wsdl:part name="parameters" element="tns:AUXTableAdministrationResponse"/>
</wsdl:message>
<wsdl:portType name="WsSrvSoap">
<wsdl:operation name="AUXTableAdministration">
<wsdl:input message="tns:AUXTableAdministrationSoapIn"/>
<wsdl:output message="tns:AUXTableAdministrationSoapOut"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="WsSrvSoap" type="tns:WsSrvSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="AUXTableAdministration">
<soap:operation soapAction="http://xxxx.com/AUXTableAdministration" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="WsSrvSoap12" type="tns:WsSrvSoap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="AUXTableAdministration">
<soap12:operation soapAction="http://xxxx.com/AUXTableAdministration" style="document"/>
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="WsSrv">
<wsdl:port name="WsSrvSoap" binding="tns:WsSrvSoap">
<soap:address location="http://dev.yyyy.com/wsAPI/WsSrv.asmx"/>
</wsdl:port>
<wsdl:port name="WsSrvSoap12" binding="tns:WsSrvSoap12">
<soap12:address location="http://dev.yyyy.com/wsAPI/WsSrv.asmx"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Prvi problem se javlja kada on pozove moj web service sa sledecim xml-om:
<?xml version="1.0" ?>
- <AUXTableAdministration xmlns="http://xxxx.com/">
<userName>gbravaccini</userName>
<password>xyz</password>
<action>INSERTROWS</action>
<tableName>PRODUCTS_DATA</tableName>
- <xDoc>
- <Root>
- <Columns>
<Column>CATEGORY</Column>
<Column>CATEGORY_DSCA</Column>
<Column>SUB_CATEGORY</Column>
<Column>SUB_CATEGORY_DSCA</Column>
<Column>GRP_ART_COD</Column>
<Column>GRP_ART_DSCA</Column>
<Column>SIT</Column>
<Column>SIT_DESCR</Column>
<Column>SUNO</Column>
<Column>ISCN</Column>
<Column>PROD_COMP</Column>
<Column>LBN1</Column>
<Column>PART_NO</Column>
<Column>PRODUCT_NAME</Column>
<Column>MODEL</Column>
<Column>COMM_DSCA_EN</Column>
<Column>TECH_DSCA_EN</Column>
<Column>LINE</Column>
<Column>MODEL_NAME</Column>
<Column>VERSION</Column>
<Column>ADDITIONAL_WEIGHT</Column>
<Column>FRAME</Column>
<Column>UPHOLSTERY_A</Column>
<Column>PLASTIC</Column>
<Column>MARKET</Column>
<Column>UNIT</Column>
<Column>WEIGHT_STACK</Column>
<Column>POWER_SUPPLY</Column>
<Column>DISPLAY</Column>
<Column>READER</Column>
<Column>SEAT</Column>
<Column>SHROUDS</Column>
<Column>TV</Column>
<Column>LANGUAGE</Column>
<Column>PACKAGING</Column>
<Column>LOCALISATION</Column>
<Column>ARMS</Column>
<Column>DRIVE_SYSTEM</Column>
<Column>SAFETY_CLUTCH</Column>
<Column>CERTIFICATION</Column>
<Column>CONFIGURATION</Column>
<Column>UPHOLSTERY_B</Column>
<Column>UPHOLSTERY_C</Column>
</Columns>
- <Rows>
- <Row>
<Value />
<Value />
<Value />
<Value />
<Value>125</Value>
<Value>CARDIO EXCITE</Value>
<Value>002</Value>
<Value>Cardio</Value>
<Value>S00101</Value>
<Value />
<Value>480</Value>
<Value>0</Value>
<Value>TEST-DA43MLTAL00</Value>
<Value>Treadmill Excite+ Jog 700</Value>
<Value>DA43MLT</Value>
<Value>Excite+ Treadmill Jog 700, Display: LED, Reader: Wellness System, Frame: Grey, Shrouds: Flint Grey, Language: French</Value>
<Value>Line: Excite+, Model: Treadmill, Version: Jog 700, Power Supply: Medical version, Display: LED, Reader: Wellness System, Frame: Grey, Shrouds: Flint Grey, Language: French, Packaging: Standard International</Value>
<Value>Excite+</Value>
<Value>Treadmill</Value>
<Value>Jog 700</Value>
<Value />
<Value>Grey</Value>
<Value />
<Value />
<Value />
<Value />
<Value />
<Value>Medical version</Value>
<Value>LED</Value>
<Value>Wellness System</Value>
<Value />
<Value>Flint Grey</Value>
<Value />
<Value>French</Value>
<Value>Standard International</Value>
<Value />
<Value />
<Value />
<Value />
<Value />
<Value />
<Value />
<Value />
</Row>
</Rows>
</Root>
</xDoc>
</AUXTableAdministration>
Meni kao ulazni parametar metode stigne isti taj xml ali element <Root> sadrzi atribut xmlns="xxxx.com". Znaci <Root xmlns="xxxx.com">... Tada xPath nece da radi. Medjutim, taj problem sam nekako i resio tako sto odbacim taj atribut. Problem je sto ja kada kao izlazni argument metode vratim njemu sledeci xml:
<?xml version="1.0" ?>
<AUXTableAdministrationResponse xmlns="http://xxxx.com/">
<AUXTableAdministrationResult>
<Result>
<Status>OK</Status>
<InsertedId>51716</InsertedId>
<Message>action 'INSERTROWS' for PRODUCTS_DATA succeeded</Message>
</Result>
</AUXTableAdministrationResult>
</AUXTableAdministrationResponse>
Cast Iron opet doda xmlns atribut, ovoga puta na Result samo sto je ovoga puta vrednost tog atributa prazna. Znaci <Result xmlns="">. Sada se njemu tamo razlecu xPath-ovi ali on ne moze rucno da ukloni taj atribut.
Pre svega, ima li nekoga da je razumeo problem posto sam bio bas opsiran? Ako ima, bio bih zahvalan ako bi neko mogao da mi pomogne oko ovoga.
Hvala
[Ovu poruku je menjao mmix dana 19.06.2010. u 18:09 GMT+1]