Avatar billede margitbork Nybegynder
31. august 2004 - 12:10 Der er 19 kommentarer og
1 løsning

generere stub ud af wsdl kombineret med xsd fil

Jeg skal kalde en webservice som er beskrevet i dels en wsdl fil, hvor svaret tilbage er angivet som en String, som er i XML format, og dels en xsd fil som beskriver denne.

Hvordan får jeg genereret mig en stub ud fra disse to ?
Avatar billede Slettet bruger
31. august 2004 - 12:17 #1
Jeg skrev en synopsis om det på dmu, hvis du gi'r mig din mail-adresse vil jeg glædeligt dele den med dig.
Avatar billede margitbork Nybegynder
31. august 2004 - 12:20 #2
net_katten@hotmail.com
Avatar billede Slettet bruger
31. august 2004 - 12:20 #3
ok, sender den nu :-)
Avatar billede Slettet bruger
31. august 2004 - 12:24 #4
Jeg tror der er en god ide hvis du lukker dette spørgsmål: http://www.eksperten.dk/spm/534812, det ligner nemli' rimeligt meget dette, og man må stille sammen spørgsmål 2 gange / steder.
Avatar billede margitbork Nybegynder
31. august 2004 - 12:26 #5
UPS...
Avatar billede margitbork Nybegynder
31. august 2004 - 12:30 #6
Jeg har lukket den anden, og inviteret over på dette spm.
Avatar billede margitbork Nybegynder
31. august 2004 - 12:32 #7
Arnes kommentar
Nu skal vi holde tungen lige i munden.

1)

Du sender en streng som ikke indeholder XML via SOAP over HTTP som RPC kald, hvilket
betyder at den er encodet som XML undervejs.

Du kan generere en stub udfra WSDL filen. Og du laver dit RPC kald og aner
intet om at der noget der hedder XML.

2)

Du sender en streng som indeholder XML via SOAP over HTTP som RPC kald, hvilket
betyder at den er encodet som XML undervejs.

Du kan generere en stub udfra WSDL filen. Og du laver dit RPC kald og kalder
en XML parser på den streng som du får tilbage og indeholder XML
payloaden (ikke at forveksle med XML transporten).

3)

Det er slet ikke RPC style.
Avatar billede margitbork Nybegynder
31. august 2004 - 12:33 #8
hvad er RPC ?
Avatar billede Slettet bruger
31. august 2004 - 12:36 #9
RPC står for Remote Procedure Call, forklaring fåes via. nedenstående link (Google er din ven). Basalt blot at kalde en metode vha. en anden tilgangsmåde (over net) end direkte vha. et metodekald at invokere en metode.

http://www.google.com/search?sourceid=navclient&ie=UTF-8&q=define%3A+rpc
Avatar billede arne_v Ekspert
31. august 2004 - 12:36 #10
Man kan lave Web Service kald på 2 måder: RPC style og document style.

RPC style er når man har et API med metoder, argumenter og typer.
Avatar billede arne_v Ekspert
31. august 2004 - 12:37 #11
Men det er ret vigtigt at vide om det er 1, 2 eller 3 - fordi det er
3 helt forskellige ting.
Avatar billede margitbork Nybegynder
31. august 2004 - 12:44 #12
Hvordan kan jeg se hvilken det er ?
Jeg vil umiddelbart sige at det er nr 2. men hvad er "document style"??

Jeg har hørt at man kan vælge at lade wsdl'en nøjes med at beskrive selve webservicen og dens metoder, men uden at videre specificere hvad der returneres, men blot angive at der returneres en String (som så er i XML format). For at kunne finde ud af hvad man så egentligt står med skal man bruge xsd filen som beskriver den returnerede string.
Kan man få axis til at generere en stub ud fra det ??
Avatar billede arne_v Ekspert
31. august 2004 - 12:47 #13
Med #2 genererer du stub udfra WSDL, kalder en metode med nogle argumenter,
får en String tilbage som du så kan parse helt normalt.
Avatar billede arne_v Ekspert
31. august 2004 - 12:48 #14
document style er så vidt jeg ved (jeg bruger altid RPC style) når man
sender et XML dokument og får et XML dokument tilbage.

Mere ustruktureret og mere fleksibelt end RPC.
Avatar billede arne_v Ekspert
31. august 2004 - 12:50 #15
Avatar billede margitbork Nybegynder
31. august 2004 - 12:54 #16
Ok nr 2.
Men kan man få genereret en stub hvor man inkluderer de informatoner der ligger i xsd filen ?  Eller alternativt hvordan parser jeg en String. Jeg har kun fundet ud af hvordan man parser en XML fil som indlæses via noget IO
Avatar billede arne_v Ekspert
31. august 2004 - 13:04 #17
Du bør kunne lave:

Document doc = bld.parse(new ByteArrayInputStream(xmlstr.getBytes("UTF-8")));
Avatar billede margitbork Nybegynder
31. august 2004 - 13:08 #18
sådan ser min wsdl ud. xsd følger..
<?xml version="1.0" encoding="utf-8" ?>
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0="http://localhost:80/myservice/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://localhost:80/myservice/" xmlns="http://schemas.xmlsoap.org/wsdl/">

- <types>
  - <s:schema elementFormDefault="qualified" targetNamespace="http://localhost:80/myservice/">

      - <s:element name="SpaerKunde">
        - <s:complexType>
          - <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="kundeNummer" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>

      - <s:element name="SpaerKundeResponse">
        - <s:complexType>
          - <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="SpaerKundeResult" type="s:int" />
          </s:sequence>
        </s:complexType>
      </s:element>

      - <s:element name="HentXMLDokument">
        - <s:complexType>
          - <s:sequence>
            <s:element minOccurs="1" maxOccurs="1" name="fragtbrevNummer" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>

      - <s:element name="HentXMLDokumentResponse">
        - <s:complexType>
          - <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="HentXMLDokumentResult" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
  </s:schema>
</types>
 
 
 
- <message name="SpaerKundeSoapIn">
    <part name="parameters" element="s0:SpaerKunde" />
  </message>
 
- <message name="SpaerKundeSoapOut">
    <part name="parameters" element="s0:SpaerKundeResponse" />
  </message>

- <message name="HentXMLDokumentSoapIn">
    <part name="parameters" element="s0:HentXMLDokument" />
  </message>

- <message name="HentXMLDokumentSoapOut">
    <part name="parameters" element="s0:HentXMLDokumentResponse" />
  </message>
 
 
 
- <portType name="Service1Soap">

  - <operation name="SpaerKunde">
      <input message="s0:SpaerKundeSoapIn" />
      <output message="s0:SpaerKundeSoapOut" />
    </operation>

  - <operation name="HentXMLDokument">
      <input message="s0:HentXMLDokumentSoapIn" />
      <output message="s0:HentXMLDokumentSoapOut" />
    </operation>

  </portType>




- <binding name="Service1Soap" type="s0:Service1Soap">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
  - <operation name="SpaerKunde">
      <soap:operation soapAction="http://localhost:80/myservice/SpaerKunde" style="document" />
      - <input>
          <soap:body use="literal" />
        </input>
      - <output>
          <soap:body use="literal" />
        </output>
    </operation>

  - <operation name="HentXMLDokument">
      <soap:operation soapAction="http://localhost:80/myservice/HentXMLDokument" style="document" />
      - <input>
          <soap:body use="literal" />
        </input>
      - <output>
          <soap:body use="literal" />
        </output>
    </operation>
  </binding>
 


 
  - <service name="Service1">
    - <port name="Service1Soap" binding="s0:Service1Soap">
        <soap:address location="http://localhost:80/myservice" />
      </port>
    </service>
</definitions>
Avatar billede margitbork Nybegynder
31. august 2004 - 13:13 #19
og her er xsd'en

<?xml version="1.0" ?>
<xs:schema id="NewDataSet" targetNamespace="http://localhost:80/myservice/dokument.xsd" xmlns:mstns="http://localhost:80/myservice/dokument.xsd"
    xmlns="http://localhost:80/myservice/dokument.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
    attributeFormDefault="qualified" elementFormDefault="qualified">
    <xs:element name="dokument">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Nummer" type="xs:string" minOccurs="0" maxOccurs="1" />
                <xs:element name="TotalVaegt" type="xs:decimal" minOccurs="0" maxOccurs="1" />
                <xs:element name="TotalRumfang" type="xs:decimal" minOccurs="0" maxOccurs="1" />
                <xs:element name="Leveringsbemaerkning" type="xs:string" minOccurs="0" maxOccurs="1" />
                <xs:element name="ModtagerTelefonnummer" type="xs:decimal" minOccurs="0" maxOccurs="1" />
                <xs:element name="Kontonummer" type="xs:string" minOccurs="0" maxOccurs="1" />
                <xs:element name="Efterkrav" minOccurs="0" maxOccurs="1">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="EfterkravAktiv" type="xs:boolean" minOccurs="0" maxOccurs="1" />
                            <xs:element name="EfterkravKontant" type="xs:boolean" minOccurs="0" maxOccurs="1" />
                            <xs:element name="EfterkravBeloeb" type="xs:decimal" minOccurs="0" maxOccurs="1" />
                            <xs:element name="EfterkravValuta" type="xs:string" minOccurs="0" maxOccurs="1" />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="Afsender" minOccurs="0" maxOccurs="1">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="AfsenderNavn" type="xs:string" minOccurs="0" maxOccurs="1" />
                            <xs:element name="AfsenderAdresse1" type="xs:string" minOccurs="0" maxOccurs="1" />
                            <xs:element name="AfsenderPostnummer" type="xs:string" minOccurs="0" maxOccurs="1" />
                            <xs:element name="AfsenderBynavn" type="xs:string" minOccurs="0" maxOccurs="1" />
                            <xs:element name="AfsenderLand" type="xs:string" minOccurs="0" maxOccurs="1" />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="Modtager" minOccurs="0" maxOccurs="1">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="ModtagerNummer" type="xs:decimal" minOccurs="0" maxOccurs="1" />
                            <xs:element name="ModtagerNavn" type="xs:string" minOccurs="0" maxOccurs="1" />
                            <xs:element name="ModtagerAdresse1" type="xs:string" minOccurs="0" maxOccurs="1" />
                            <xs:element name="ModtagerPostnummer" type="xs:string" minOccurs="0" maxOccurs="1" />
                            <xs:element name="ModtagerBynavn" type="xs:string" minOccurs="0" maxOccurs="1" />
                            <xs:element name="ModtagerLand" type="xs:string" minOccurs="0" maxOccurs="1" />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
Avatar billede margitbork Nybegynder
16. august 2006 - 10:49 #20
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester