Client für WebService programmieren (aus WSDL-File)

Status
Nicht offen für weitere Antworten.

Juliane

Mitglied
Hallo,
ich versuche, einen Client zu programmieren, der auf einen WebService zugreift.
Habe vom Entwickler des WebServices die entsprechende wsdl-Datei bekommen und versuche jetzt, Abfragen zu senden und auch Antworten zu bekommen.

Bis jetzt habe ich folgendes gemacht:
- aus der wsdl-Datei mit WSDL2Java die entsprechenden Java-Files erzeugt
- ein einfaches Client-Programm geschrieben, das erstmal nur auf eine der Methoden des Service zugreifen soll und das Ergebnis als String ausgibt
- das Programm kompiliert und gestartet

>>>>>Leider kriege ich immer nur UnknownHostExceptions :(
  • AxisFault
    faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
    faultSubcode:
    faultString: java.net.UnknownHostException: ollilap
    faultActor:
    faultNode:
    faultDetail:
    {http://xml.apache.org/axis/}stackTrace:java.net.UnknownHostException: ollilap
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.axis.components.net.DefaultSocketFactory.create(DefaultSocketFactory.java:153)
    at org.apache.axis.components.net.DefaultSocketFactory.create(DefaultSocketFactory.java:120)
    at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:181)
    at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:397)
    at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:135)
    at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
    at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
    at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
    at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
    at org.apache.axis.client.Call.invokeEngine(Call.java:2754)
    at org.apache.axis.client.Call.invoke(Call.java:2737)
    at org.apache.axis.client.Call.invoke(Call.java:2413)
    at org.apache.axis.client.Call.invoke(Call.java:2336)
    at org.apache.axis.client.Call.invoke(Call.java:1793)
    at ollilap.axis.services.XXXWebService.XXXWebServiceSoapBindingStub.operation1 XXXWebServiceSoapBindingStub.java:547)
    at XXXWebTest.runIt(XXXWebTest.java:38
    at XXXWebTest.main(XXXWebTest.java:26)

    {http://xml.apache.org/axis/}hostname:Dell1

    java.net.UnknownHostException: ollilap
    at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
    at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:144)

    at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrateg
    y.java:32)
    at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
    at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
    at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
    at org.apache.axis.client.Call.invokeEngine(Call.java:2754)
    at org.apache.axis.client.Call.invoke(Call.java:2737)
    at org.apache.axis.client.Call.invoke(Call.java:2413)
    at org.apache.axis.client.Call.invoke(Call.java:2336)
    at org.apache.axis.client.Call.invoke(Call.java:1793)
    at ollilap.axis.services.XXXWebService.XXXWebServiceSoapBindingStub.operation1(XXXWebServiceSoapBindingStub.java:547)
    at XXXWebTest.runIt(XXXWebTest.java:38
    at XXXWebTest.main(XXXWebTest.java:26)
    Caused by: java.net.UnknownHostException: ollilap
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.axis.components.net.DefaultSocketFactory.create(DefaultSoc
    ketFactory.java:153)
    at org.apache.axis.components.net.DefaultSocketFactory.create(DefaultSoc
    ketFactory.java:120)
    at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:1
    81)
    at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.ja
    va:397)
    at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:135)

    ... 12 more

Ein Ausschnitt aus meinem Client-Programm:

Code:
public class XXXWebTest 
{ 
    public static void main(String [] args) throws Exception { 
        try { 
            runIt(); 
        } catch(Exception e) { 
            e.printStackTrace(); 
        } 
    } 
  
    private static void runIt() throws Exception { 
        String ret = ""; 
  
        XXXWebServiceService service = new XXXWebServiceServiceLocator(); 
        XXXWebService port = service.getXXXWebService(); 
        ret = (String) port.operation1(null,null,"String1","String2",null,null,null,true,new int[] {0}); 
  
        System.out.println(ret); 
    } 
}
Kann mir irgendjemand sagen, was ich falsch mache? Sitz jetzt schon über ne Woche daran und bin am verzweifeln. Kann doch nich so schwer sein, auf einen WebService zuzugreifen.

Alle Beispiele (aus Tutorials...), die ich ausprobiert habe, funktionieren. Da wird allerdings auch immer auf localhost zugegriffen.
 

KISS

Bekanntes Mitglied
java.net.UnknownHostException: ollilap
sagt uns das der host olliap nicht gefunden wird, wirst wohl mal deinen servicelocator konfigurieren muessen
 

Juliane

Mitglied
Wie macht man das?
(Soory - sind alles Fremdwörter für mich. Versuche gerade erst mich da ein bisschen reinzuarbeiten. Is wohl nich so
gut für nen Java-Anfänger, gleich mit WebServices anfangen zu müssen ;o)
 

KISS

Bekanntes Mitglied
aeh, ich fuercht du wirst nicht umhinkommen die doku zu lesen, bei schnellem ueberfliegen habe ich was gefunden was dein problem sein sollte (bin mir da nicht 100% sicher)

Normally, a client program would not instantiate a stub directly. It would instead instantiate a service locator and call a get method which returns a stub. This locator is derived from the service clause in the WSDL. WSDL2Java generates two objects from a service clause. For example, given the WSDL:

<service name="AddressBookService">
<port name="AddressBook" binding="tns:AddressBookSOAPBinding">
<soap:address location="http://localhost:8080/axis/services/AddressBook"/>
</port>
</service>

WSDL2Java will generate the service interface:

public interface AddressBookService extends javax.xml.rpc.Service {
public String getAddressBookAddress();

public AddressBook getAddressBook() throws javax.xml.rpc.ServiceException;

public AddressBook getAddressBook(URL portAddress)
throws javax.xml.rpc.ServiceException;
}

WSDL2Java will also generate the locator which implements this interface:

public class AddressBookServiceLocator extends org.apache.axis.client.Service
implements AddressBookService {
...
}

The service interface defines a get method for each port listed in the service element of the WSDL. The locator is the implementation of this service interface. It implements these get methods. It serves as a locator for obtaining Stub instances. The Service class will by default make a Stub which points to the endpoint URL described in the WSDL file, but you may also specify a different URL when you ask for the PortType.

A typical usage of the stub classes would be as follows:

public class Tester {
public static void main(String [] args) throws Exception {
// Make a service
AddressBookService service = new AddressBookServiceLocator();

// Now use the service to get a stub which implements the SDI.
AddressBook port = service.getAddressBook();

// Make the actual call
Address address = new Address(...);
port.addEntry("Russell Butek", address);
}
}
 

Juliane

Mitglied
Is es das, was ich nich verstehe?:

The Service class will by default make a Stub which points to the endpoint URL described in the WSDL file, but
you may also specify a different URL when you ask for the PortType.

Das Beispiel (AddressBook) hab ich schon ausprobiert. Klappt auch alles. Dazu hab ich aber vorher mit ner
deploy.wsdd-Datei den Service lokal "deployed", greife also auf http://localhost:8080/axis/services/AddressBook zu.
Dann gehts ja auch. Hab auch das Beispiel AmazonWebService hingekriegt und konnte drauf zugreifen (will damit nur
sagen, dass ich schon ne Woche lang Dokus und Tutorials lese ;o)

Im Prinzip hab ich ja ansonsten genau das gleiche gemacht wie im AddressBook-Beispiel. Oder???? *verzweifeltkuck*
 

KISS

Bekanntes Mitglied
in deinem deployment muss irgendwo (deploy.wsdd?) als url so etwas wie http://olliap ... eingetragen sein (sonst wuerde er nicht danach suchen)

also 2 moeglichkeiten:
1. der hostname stimmt, dann musst du feststellen warum er nicht erreichbar ist oder warum der dns ihn nicht aufloest
2. der hostname stimmt nicht, dann musst du ihn im deployment aendern

falls du nicht mit wsdd sondern mit jws analog dazu. da ich noch nichts mit axis gemacht habe kann ich dir nur empfehlen (falls du die files nicht findest) mit grep -R '://olliap' die platte zu durchsuchen
 

Bleiglanz

Gesperrter Benutzer
sind die vielen "null" Werte beim Aufruf erlaubt?

das leere Array?

poste mal das wsdl (oder zumindest die operations für deinen Aufruf)
 

Juliane

Mitglied
poste mal das wsdl (oder zumindest die operations für deinen Aufruf)

hier mal ein Teil der (eigentlich riesigen) wsdl-Datei:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://ollilap:8081/axis/services/XXXWebService"
xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://ollilap:8081/axis/services/XXXWebService"
xmlns:intf="http://ollilap:8081/axis/services/XXXWebService"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="http://www.w3.org/1999/XMLSchema"
xmlns:tns2="http://www.w3.org/2003/05/soap-encoding" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDL created by Apache Axis version: 1.2alpha
Built on Dec 01, 2003 (04:33:24 EST)-->
 <wsdl:types>
  <schema targetNamespace="http://ollilap:8081/axis/services/XXXWebService" xmlns="http://www.w3.org/2001/XMLSchema">
   <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
   <complexType name="ArrayOf_xsd_int">
    <complexContent>
     <restriction base="soapenc:Array">
      <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:int[]"/>
     </restriction>
    </complexContent>
   </complexType>
  </schema>
 </wsdl:types>

   <wsdl:message name="Response1">

      <wsdl:part name="Return1" type="tns2:string"/>

   </wsdl:message>

   <wsdl:message name="Request1">

      <wsdl:part name="Param1" type="tns2:string"/>

      <wsdl:part name="Param2" type="tns2:string"/>

      <wsdl:part name="Param3" type="tns2:string"/>

      <wsdl:part name="Param4" type="tns2:string"/>

      <wsdl:part name="Param5" type="tns2:string"/>

      <wsdl:part name="Param6" type="tns2:string"/>

      <wsdl:part name="Param7" type="tns2:string"/>

      <wsdl:part name="Param8" type="xsd:boolean"/>

      <wsdl:part name="Param9" type="impl:ArrayOf_xsd_int"/>

   </wsdl:message>

   <wsdl:portType name="XXXWebService">

      <wsdl:operation name="operation1" parameterOrder="Param1 Param2 Param3 Param4 Param5 Param6 Param7 Param8 Param9">

         <wsdl:input message="impl:Request1" name="Request1"/>

         <wsdl:output message="impl:Response1" name="Response1"/>

      </wsdl:operation>

   </wsdl:portType>

   <wsdl:binding name="XXXWebServiceSoapBinding" type="impl:XXXWebService">

      <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

      <wsdl:operation name="operation1">

         <wsdlsoap:operation soapAction=""/>

         <wsdl:input name="Request1">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://DefaultNamespace" use="encoded"/>

         </wsdl:input>

         <wsdl:output name="Response1">

            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ollilap:8081/axis/services/XXXWebService" use="encoded"/>

         </wsdl:output>

      </wsdl:operation>

   </wsdl:binding>

   <wsdl:service name="XXXWebServiceService">

      <wsdl:port binding="impl:XXXWebServiceSoapBinding" name="XXXWebService">

         <wsdlsoap:address location="http://ollilap:8081/axis/services/XXXWebService"/>

      </wsdl:port>

   </wsdl:service>

</wsdl:definitions>

Hoffe, ich hab beim Editieren nicht irgendwas falsch gemacht.
 

Juliane

Mitglied
in deinem deployment muss irgendwo (deploy.wsdd?) als url so etwas wie http://olliap ... eingetragen sein
(sonst wuerde er nicht danach suchen)

also 2 moeglichkeiten:
1. der hostname stimmt, dann musst du feststellen warum er nicht erreichbar ist oder warum der dns ihn nicht aufloest
2. der hostname stimmt nicht, dann musst du ihn im deployment aendern

ich habe noch keine deploy.wsdd-Datei erstellt, weil ich dachte, das ist nicht nötig, wenn man nicht auf localhost
sondern auf einen "externen" WebService zugreifen will.
In der wsdl-Datei ist http://ollilap usw definiert (siehe letztes Posting)

also zu 1. (der Hostname stimmt nicht): kann ich eigentlich nich glauben, weil ich die wsdl-Datei erst vor 2 Wochen
gekriegt habe und das aktuell sein müsste (oder hab ich da schon nen riesigen Denkfehler drin?)
zu 2.: um den Service zu deployen reicht doch nich die wsdl-Datei aus, oder? Die automatisch (wsdl2java) generierte
Datei sieht so aus:
Code:
<deployment
    xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

  

  <service name="XXXWebService" provider="java:RPC" style="rpc" use="encoded">
      <parameter name="wsdlTargetNamespace" value="http://ollilap:8081/axis/services/XXXWebService"/>
      <parameter name="wsdlServiceElement" value="XXXWebServiceService"/>
      <parameter name="wsdlServicePort" value="XXXWebService"/>
      <parameter name="className" value="ollilap.axis.services.XXXWebService.XXXWebServiceSoapBindingSkeleton"/>
      <parameter name="wsdlPortType" value="XXXWebService"/>
      <parameter name="typeMappingVersion" value="1.2"/>
      <parameter name="allowedMethods" value="*"/>

      <typeMapping
        xmlns:ns="http://ollilap:8081/axis/services/XXXWebService"
        qname="ns:ArrayOf_xsd_int"
        type="java:int[]"
        serializer="org.apache.axis.encoding.ser.ArraySerializerFactory"
        deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory"
        encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
      />
  </service>
</deployment>

da steht aber auch wieder http://ollilap drin (is ja auch klar) --> also würde es auch nix bringen, den Service zu deployen?
 

Juliane

Mitglied
also heißt das jetzt, dass die mir wahrscheinlich ne total veraltete wsdl-Datei geschickt haben und es den
Hostnamen gar nich mehr gibt?
 

KISS

Bekanntes Mitglied
Well, life is a bitch.
naja, nicht unbedingt. es koennte ein host sein der nur innerhalb der firma oder eines vpns erreichbar ist. aber warscheinlich ist die datei einfach nur veraltet.
 

Juliane

Mitglied
Na toll. :eek:/
Und sowas machen die mit nem Java-Anfänger.
Dann ruf ich da morgen gleich mal an und frag mal nach.

Aber trotzdem danke erstmal. Jetzt kann ich da wenigstens anrufen ohne mich zum Klopps zu machen, weil ich
überhaupt keine Ahnung habe wovon ich rede. *g*

Also bis dann (hier wird man wenigstens geholfen :D )

Juliane
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M SOAP-Client funktioniert plötzlich nicht mehr XML & JSON 2
S Java REST Client + Json XML & JSON 8
K http client übertragung XML & JSON 6
K Axis SOAP Client und https XML & JSON 3
F Erste Schritte: soap client XML & JSON 7
S Jackson: Erstellen Sie Klassen für Jackson aus XSD XML & JSON 2
N JAXB: Überflüssiges Wrapper-Tag für Map-Einträge XML & JSON 0
H Editor für Apache FOP XML & JSON 5
E Gibt es denn einen XML-Parser für JUnit-Tests? XML & JSON 6
A XMLRPC für Java XML & JSON 3
S Ersatz für die veraltete Klasse XPath XML & JSON 1
D ods./Excel Tabelle oder doch SQL für nen Anfänger? XML & JSON 5
S Xml File für den Aufbau einer anderen Xml Datei XML & JSON 6
R Rückgabewert für XML-Abschnitt XML & JSON 2
X JDom für SOAP Dateien geeignet? XML & JSON 3
D eine Schema für ein andere Schema XML XML & JSON 14
T XML-Stream als Quelle für FOP XML & JSON 4
Z Tutorial für JDOM (XSD-Shema) XML & JSON 3
D [EMF,XSD] PatternMatcher für eigene Methoden benutzen XML & JSON 3
F Standard für das erstellen von XML? XML & JSON 4
H XML plattformunabhängig/Open Source für Java XML & JSON 4
G Idee für kleines Vorführprojekt XML & JSON 5
isowiz Welches Persistenzframework für XML? XML & JSON 3
T Java Klasse für gegebenes XML erstellen XML & JSON 4
B XML file für schtasks XML & JSON 5
G XPath gesucht für Tag mit konkretem Content XML & JSON 2
F beste lib für xml serialisierung - deserialisierung XML & JSON 4
HeRaider Steuerzeichen für Zeilenumbrüche XML & JSON 2
T Editor für XML-Dialekt entwickeln XML & JSON 3
M brauche große XML-Datei für XPath-Tests XML & JSON 4
M Best Practices für Data Binding ohne Hilfstools XML & JSON 14
A XML für Einstellungen - welche Strategie verwenden? XML & JSON 4
M XSL-File für Transformation verwenden XML & JSON 3
C Pfadangabe für Bilder XML & JSON 2
T DTD für XML-Instanz einbinden? XML & JSON 4
Z beispiel für valides Xml-Dokument durch XML-Schema XML & JSON 5
G XML als "Datenbank" für kleine Daten XML & JSON 2
D Suche eine OnlineQuelle für SAX XML & JSON 2
M Kann Anbieter eines (REST) Webservice seine Konsumenten automatisch benachrichtigen? XML & JSON 9
GianaSisters Webservice Integer/Double bitte nicht mitübertragen XML & JSON 2
M RSS-Datei auslesen von Yahoo Webservice XML & JSON 4
D xml über webservice XML & JSON 5
R XML aus WebService rausquetschen XML & JSON 9

Ähnliche Java Themen

Neue Themen


Oben