Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Cast Iron dodaje atribut xmlns, a ja ga ne zelim

[es] :: .NET :: Cast Iron dodaje atribut xmlns, a ja ga ne zelim

[ Pregleda: 1611 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

tdusko

Član broj: 93380
Poruke: 1702
*.dynamic.sbb.rs.



+768 Profil

icon Cast Iron dodaje atribut xmlns, a ja ga ne zelim19.06.2010. u 10:53 - pre 168 meseci
Ne znam koliko ljudi ovde je imalo prilika da radi sa ovim sistemom ali sobzirom da ja nisam neki XML/WSDL/XSD mag vrlo je verovatno da ovaj problem nije Cast Iron specific.

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:

Code (xml):

<?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:
Code (xml):

  <?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:

Code (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]
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Cast Iron dodaje atribut xmlns, a ja ga ne zelim19.06.2010. u 17:15 - pre 168 meseci
Ne koristim castiron ali mozda pokusam da ti pomognem. Ono sto ne razumem je zasto uopste i zelis da skines xmlns u rootu? XPath podrzava namespaces u zavisnosti od toaga koji alat/XPAthEngine koristis.

Drugo, kako case iron od ono XMLa dobije Result sa praznim xmlns-om? Ako je root node (AUXTableAdministrationResponse) sa default namespace-om onda sva deca nasledjuju taj namespace, dakle Result mora da ima "http://xxxx.com/" namepace inace to nije fragment ovog xmla.


Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

tdusko

Član broj: 93380
Poruke: 1702
*.dynamic.sbb.rs.



+768 Profil

icon Re: Cast Iron dodaje atribut xmlns, a ja ga ne zelim19.06.2010. u 17:37 - pre 168 meseci
Hvala mmix na trudu. Kada sam rekao da ne radi xPath mislio sam konkretno na ovo:

Code:

XmlNodeList columnList = xDoc.SelectNodes("/Root/Columns/Column");


ako root ima xmlns atribute, columnList ce biti prazno. Cim skinem xmlns dobijem sve nodove Column. Inace, alat koji koristim za manipulaciju xml/xslt/xsd... "EditiX" takodje ne vraca nista ako root ima xmlns atribut.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Cast Iron dodaje atribut xmlns, a ja ga ne zelim19.06.2010. u 17:45 - pre 168 meseci
Ako koristis .NET on ima NamespaceManager koji je opcioni parametar u svim komandama koje koriste xpath

Npr

Code (csharp):

XmlNamespaceManager namespaceManager = new XmlNamespaceManager(xDoc.NameTable);  
namespaceManager.AddNamespace("x", xDoc.DocumentElement.NamespaceURI);
XmlNodeList columnList = xDoc.SelectNodes("/x:Root/x:Columns/x:Column", namespaceManager);
 

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

tdusko

Član broj: 93380
Poruke: 1702
*.dynamic.sbb.rs.



+768 Profil

icon Re: Cast Iron dodaje atribut xmlns, a ja ga ne zelim19.06.2010. u 18:00 - pre 168 meseci
Nisam znao za namespaceManager-a, resice mi prvi problem mnogo elegantnije nego sto sam ga ja resio. Sto se tice drugog problema, moram da proverim sa klijentom da li cast iron-u smeta sto postoji atribut xmlns ili mu smeta sto je prazan.

mmix, mozes li mi ukratko objasniti zasto kada ovaj web service pozovem koristeci c# ili java kod, ne dobijem xmlns atribut u root elementu niti tamo kao odgovor stigne xmlns u result elementu, a kada se pozove iz cast iron(a predpostavljam i iz drugih koji mogu da prave soap poruke) dodaje se taj atribut?

Hvala

 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Cast Iron dodaje atribut xmlns, a ja ga ne zelim19.06.2010. u 18:50 - pre 168 meseci
NIsam bas siguran kako si uopste dosao u tu situaciju. AKo sam shavtio dobro castIron je neki integration service i dao ti je wsdl koji ti treba da implementiras kod sebe, ne?

Ovo sto si otkacio mi ne otkriva dovoljno pdataka, kad pogledas samo wsdl ima ovaj segment:

Code:

    <s:schema elementFormDefault="qualified" targetNamespace="http://xxxx.com/">  
      <s:element name="AUXTableAdministration">


Ovo opisuje element AUXTableAdministration kao <AUXTableAdministration xmlns="http://xxxx.com/"> i kako takav treba da bude u zahtevu, isto tako i element AUXTableAdministrationResponse je u istom targetNamespace-u. Malo mi je cudno da ti .NET to ne radi, jesi apsolutno siguran u to?

Isto mi je i cudno zasto baratas sa sirovim XMLom u xDoc? Ako je service pisan u .NETu trebao bi da koristis xml serijalizaciju kad vec postoji definicija za [http://xxxx.com/]:InsertUpdateDeleteRowsRequest. Ajde pomozi da pomognem tebi, kako je isao proces izrade tvog veb servisa.

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

tdusko

Član broj: 93380
Poruke: 1702
*.dynamic.sbb.rs.



+768 Profil

icon Re: Cast Iron dodaje atribut xmlns, a ja ga ne zelim19.06.2010. u 19:35 - pre 168 meseci
Evo ovako.

Ako sam dobro razumeo, pitao si me zasto radim sa sirovim xml-om umesto da radim sa klasama Columns, Column... Te klase ne postoje, postoje rucno napisane xsd sheme za request(root) i response(result). Koje izgledaju ovako:

Code (xml):

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
   xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Columns" maxOccurs="1" minOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="Column" minOccurs="1">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="ColumnName" type="xs:string"
                     maxOccurs="1" minOccurs="1" />
                    <xs:element name="ColumnSize" type="xs:unsignedInt"
                     maxOccurs="1" minOccurs="1" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
 


Code (xml):

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
   xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Result">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Status" type="oknok" maxOccurs="1" minOccurs="1" />
        <xs:element name="Message" type="xs:string" maxOccurs="1" minOccurs="1" />
        <xs:element name="InsertedId" type="xs:integer" maxOccurs="1" minOccurs="1" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:simpleType name="oknok">
    <xs:restriction base="xs:string">
      <xs:enumeration value="OK" />
      <xs:enumeration value="NOK" />
    </xs:restriction>
  </xs:simpleType>
</xs:schema>
 


I postoji wsdl koji izgleda ovako:

Code (xml):

<?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">
              <s:complexType mixed="true">
                <s:sequence>
                  <s:any />
                </s:sequence>
              </s:complexType>
            </s:element>

          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="AUXTableAdministrationResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="AUXTableAdministrationResult">
              <s:complexType mixed="true">
                <s:sequence>

                  <s:any />
                </s:sequence>
              </s:complexType>
            </s:element>
          </s:sequence>
        </s:complexType>
      </s:element>
    </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">

      </wsdl:output>
    </wsdl:operation>
    <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://www.xyz.com/wsAPI/WsSrv.asmx" />
    </wsdl:port>
    <wsdl:port name="WsSrvSoap12" binding="tns:WsSrvSoap12">
      <soap12:address location="http://www.xyz.com/wsAPI/WsSrv.asmx" />

    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>
 


Kao sto vidis, originalni wsdl ne sadrzi definicije root i result elemenata. Ako se poziva iz .net-a to nije ni potrebno, jednostavno kao argument metode prosledis xmlDocument koji uopste i ne mora da odgovara xsd shemi vec je onaj ko poziva web service koristi samo kako bi znao kakav xml treba da napravi. Ja kada prihvatam taj xml takodje ne validiram isti sa xsd shemom vec preko pomenute metode SelectNodes selektujem nodove koji mi trebaju i dalje manipulisem sa time. Kao sto rekoh, u tim slucajevima root 100% dolazi bez xmlns atributa(logujem sve input xml-ove i ni u jednom nema xmlns-a) kao sto i result stize na odrediste bez xmlns atributa.

Medjutim, klijent koji koristi Cast Iron kaze da isti ne moze da radi sa ovim wsdl-om vec da root i result moraju da budu definisani u wsdl-u. Onda sam ja uzeo i napravio wsdl koji sam okacio na pocetku i tu dolazimo na probleme koje sam opisao.

Sad nesto gledam i mislim da je mozda razlog zasto se doda xmlns atribut na root i result taj sto u definiciji elementa xDoc prvo navedem ime slozenog tipa sa namespace-om(tns) pa tek onda definisem slozeni tip naknadno umesto da ne navodem tip i odmah ispod definisem isti.

Umesto
Code (xml):

...
  <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>
                    ...
 


da ide ovako
Code (xml):

...
<s:element minOccurs="0" maxOccurs="1" name="xDoc">                
     <s:complexType>              
          <s:sequence>              
               <s:element name="Root">
                    <s:complexType>
                         <s:sequence>
                         ...
 


 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Cast Iron dodaje atribut xmlns, a ja ga ne zelim19.06.2010. u 19:49 - pre 168 meseci
Referenciranje tns tipa ti nije problem, i tns pokazuje na isti namespace a i targetNamespace u schema se prenosi i na embedded complex tipove, dobices isto u oba slucaja samo sto xDoc nece imati literalno ime za tip.


Tebi je onaj prvi wsdl prolazilo na .NETu jer xs:any ne mora da bude u istom namespace-u kao i AUXTableAdministration, pa si imao mesovite namespaceove i sve je prolazilo sa praznim namespacom. Probaj sad da importujes ovaj novi WSDL u .NET klijenta i videces da ce generisati namespaces (i da ce ti clinet proxy zapravo imati kolone kao objekte). Sto me vodi na pocetnu tvrdnju, ona dva xsda sa pocetka sigurno mozes da implementiras u .NETu kao klase. Zapravo, ako iskoristis wsdl.exe da napravis skelet web servisa ili proxy na osnovu svog wsdla sigurno ce ti wsdl.exe sam kreirati objekte za to, cak i kad pravis svoj veb servis i automatski generisani wsdl, ako klase kreiras kroz xsd.exe one ce moci da se serijalizuju u xml koji je po toj xsd semi. Interoperativnost ovih stvari je jedna od jacih osobina .NETa.

Nego da vidimo nesto dalje, sta ti tacno kaze klijent da je problem sa time sto AUXTableAdministrationResponse ima namespace?

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

tdusko

Član broj: 93380
Poruke: 1702
*.dynamic.sbb.rs.



+768 Profil

icon Re: Cast Iron dodaje atribut xmlns, a ja ga ne zelim19.06.2010. u 20:07 - pre 168 meseci
Hvala za objasnjenje, sada mi je sve mnogo jasnije. Ove tool-ove nisam koristio ali cu se sad upoznati sa njima.

Klijent tacno kaze ovo:

Citat:

I managed to successfully call your web method but web service responded with:

<?xml version="1.0" ?>
<AUXTableAdministrationResponse xmlns="http://xxxx.com/">
<AUXTableAdministrationResult>
<Result xmlns="">
<Status>OK</Status>
<InsertedId>51716</InsertedId>
<Message>action 'INSERTROWS' for PRODUCTS_DATA succeeded</Message>
</Result>
</AUXTableAdministrationResult>
</AUXTableAdministrationResponse>

And the xmlns=”” should not be present, and this make go in error to cast iron a so I’m not able to read the <Insertedid> from the response.


E sad, ja sam njega danas pitao da li je problem sto postoji xmlns atribut ili je problem sto je on prazan i da mi potvrdi da je stvarno prazan. Medjutim, Italijani izgleda slabo rade vikendom pa cu odgovor izgleda dobiti tek u ponedeljak ujutru :).

Off topic: Mogu li ja i ako mogu kako da preformatiram code sekcije da izgledaju ovako kao kada ih ti sredis? Bezveze je da moras stalno da reformatiras ako vec mogu ja ali nisam provalio kako.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Cast Iron dodaje atribut xmlns, a ja ga ne zelim19.06.2010. u 20:24 - pre 168 meseci
Kako vracas response? tj sta vraca return web metoda? XML document po Result xsd semi?

Ako da, onda samo uteraj "http://xxxx.com/" kao default namespace tog xml dokumenta. web services engine ce spakovati to u response header i result ce imati isti namespace i castIron ce ga progutati. Problem ovde je u validaciji rezultata na strani castIrona. Ti si u wsdlu rekao da result ima namespace a nisi ga dao (mada mi je cudno kako .net web service engine ovo nije zaustavio, mada, hmm, gde bi exception otisao?). aj response xml jednostavno ne odgovara definisciji iz wsdla.


Moja preporuka je da finalizujes wsdl kako valja i onda da iskoristis wsdl.ee da napravis server frontend i onda ces sve ove parametre imati kao .NET klase a sam .NET ce voditi racuna o namespaces, piece of cake. Ako ti bas treba neka iterativna operacija nad objektima u tvom kodu tu je foreach/LINQ, xpath ti nece treba uopste.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

tdusko

Član broj: 93380
Poruke: 1702
*.dynamic.sbb.rs.



+768 Profil

icon Re: Cast Iron dodaje atribut xmlns, a ja ga ne zelim19.06.2010. u 20:46 - pre 168 meseci
Ovo je response:

Code (csharp):

private XmlDocument GetOkResult(string action, string tableName, int InsertedId)
        {
            StringBuilder sb = new StringBuilder();
            XmlWriter writer = XmlWriter.Create(sb);
            writer.WriteStartDocument();
            writer.WriteStartElement("Result");
            writer.WriteElementString("Status", "OK");
            writer.WriteElementString("InsertedId", InsertedId.ToString());
            writer.WriteElementString("Message", MLPersistentManager.GetKeyValueFormated("Services.AUXTblAdmin.ActionSucc", "action", action.ToUpper(), "tableName", tableName));//" action '" + action.ToUpper() + "' for " + tableName + " succeeded");
            writer.WriteEndElement();//result
            writer.WriteEndDocument();
            writer.Close();
            XmlDocument result = new XmlDocument();
            result.LoadXml(sb.ToString());
            return result;
        }

 


Pretpostavljam da mi ti savetujes da pre return dodam
result.NamespaceURI = "http://xxxx.com/";

Teracu ga da proba cim se javi. A ovo ostalo sto si me posavetovao cu probati cim se upoznam sa wsdl.exe i xsd.exe.


 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Cast Iron dodaje atribut xmlns, a ja ga ne zelim19.06.2010. u 21:01 - pre 168 meseci
Mozes da probas i sa ovim:

Code (csharp):

writer.WriteStartElement("Result", "http://xxxx.com/");
 


ili iza WriteStartElement ubacis:

Code (csharp):

writer.WriteAttributeString("xmlns", "http://xxxx.com/");
 

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12851



+4784 Profil

icon Re: Cast Iron dodaje atribut xmlns, a ja ga ne zelim20.06.2010. u 00:15 - pre 168 meseci
Citat:
tdusko: Off topic: Mogu li ja i ako mogu kako da preformatiram code sekcije da izgledaju ovako kao kada ih ti sredis? Bezveze je da moras stalno da reformatiras ako vec mogu ja ali nisam provalio kako.


Mozes ako koristis [code:xml ].
 
Odgovor na temu

tdusko

Član broj: 93380
Poruke: 1702
*.dynamic.sbb.rs.



+768 Profil

icon Re: Cast Iron dodaje atribut xmlns, a ja ga ne zelim08.07.2010. u 22:07 - pre 168 meseci
Tek danas sam dobio potvrdu od klijenta da je sve u redu. Znaci, dodavanje namespace-a u "Result" node je resilo problem.

@mmix, hvala jos jednom
 
Odgovor na temu

[es] :: .NET :: Cast Iron dodaje atribut xmlns, a ja ga ne zelim

[ Pregleda: 1611 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.