Webservice gibt das falsche aus - Wieso

Status
Nicht offen für weitere Antworten.

GetIT

Mitglied
Habe folgenden Webservice geschrieben:

Code:
package jwsMitAxis.bookstore;

public class Book
{
    private String title;
    private String author;
    
    public Book(String title, String author){
        this.title = title;
        this.author = author;
    }
    
    public String getTitle(){return title;}
    
    public void setTitle(String title){this.title = title;}
    
    public String getAuthor(){return author;}
    
    public void setAuthor(String author){this.author = author;}
}

Code:
package jwsMitAxis.bookstore;

public class Store
{
    private Book book = new Book("title", "author");
    
    public Book getBookDetails(){return book;}
}

Code:
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
				xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
				
	<service name="Bookstore" provider="java:RPC">
		<parameter name="className" value="jwsMitAxis.bookstore.Store"/>
		<parameter name="allowedMethods" value="*"/>		
		<typeMapping qname="myNS:Book" xmlns:myNS="http://bookstore.jwsMitAxis"
			languageSpecificType="java:jwsMitAxis.bookstore.Book"
			serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
			deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
			encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
	</service>
</deployment>

Diesen Webservice habe ich deployed und bekomme nach dem Aufruf von:
localhost:8080/axis/services/Bookstore?method=getBookDetails
auch das richtige
<soapenv:Envelope>
-
<soapenv:Body>
-
<getBookDetailsResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<getBookDetailsReturn href="#id0"/>
</getBookDetailsResponse>
-
<multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns1:Book">
<author xsi:type="soapenc:string">author</author>
<title xsi:type="soapenc:string">title</title>
</multiRef>
</soapenv:Body>
</soapenv:Envelope>
zurück.


Jetzt hab ich mir nen Client dazu geschrieben:
Code:
package jwsMitAxis.bookstore;

import org.apache.axis.client.*;
import org.apache.axis.encoding.ser.*;

import java.net.URL;
import javax.xml.rpc.encoding.XMLType;
import javax.xml.rpc.ParameterMode;
import javax.xml.namespace.QName;

import jwsMitAxis.dvd.Movie;

public class StoreClient
{
    public static void main(String[] args)
    {
        try
        {
            String endpoint = "http://localhost:8080/axis/services/Bookstore";
            
            Service service = new Service();
            Call call = (Call)service.createCall();
            
            call.setTargetEndpointAddress(new URL(endpoint));
            
            call.setOperationName("getBookDetails");
            
            QName qnBook = new QName("http://bookstore.jwsMitAxis", "Book");
            
            call.registerTypeMapping(Book.class, qnBook, 
                    new BeanSerializerFactory(Book.class, qnBook),
                    new BeanDeserializerFactory(Book.class, qnBook));
            
            Book bookDetails = (Book)call.invoke(new Object[] {});
            
            System.out.println("Buch:\t" + bookDetails.getTitle());
            System.out.println("Author:\t" + bookDetails.getAuthor()); 
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

Dieser Client liefert mir die folgende Ausgabe:
Buch: author
Author: author

Wieso??


:bahnhof:
Sorry, ich weiß das das weng viel Code auf einmal ist.
Aber wenn ich eine Chance haben will eine Antwort auf meine Frage zu bekommen muss das woll sein.
 

SnooP

Top Contributor
was doch auch korrekt ist nach deinem Code...

die Soap-Nachricht liefert im Übrigen das Gleiche...

wenn du numal nen Buch definierst, was title und author als Strings speichert?
Code:
private Book book = new Book("title", "author");
Ist das Ergebnis genau das, was ich erwarten würde ;)
 

SnooP

Top Contributor
hoppa ;) - sorry - überlesen... hatte ich wohl Tomaten auf den Augen...

Dann versteh ichs auch nicht... kannst ja mal versuchen zu schauen, ob die soap-nachricht auch bei deinem client-aufruf so aussieht, wie sie aussehen soll indem du den tcpmon von axis dazwischenhängst...
 

Murray

Top Contributor
Nur eine Vermutung, da ich nicht in den Axis-Code gesehen habe: möglicherweise erfordert der den BeanDeserializer einen Default-Konstruktor in der Book-Klasse; beim Deserialisieren muss ja zunächst einmal eine Instanz erzeugt werden, bevor dann mit den Settern die einzelnen Attribute gesetzt werden können. Eigentlich würde ich in so einem Fall eine Exception erwarten, aber möglicherweise versucht Axis hier, doch den einzigen verfügbaren Konstrukor zu verwenden und scheitert dabei an der Zuordnung der Parameter (woher soll Axis auch wissen, welche Semantik die beiden String-Argumente im Book-Konstruktor haben?).

Ergänze in Book doch mal einen Default-Konstruktor:
Code:
public Book() {
  this( "!!unknown title!!", "!!unknown author!!");
}

(Dabei ist die Delegation an der String-String-Konstruktur nicht wirklich nötig und im Produktivbetrieb auch möglicherweise störend, denn diese Zuweiseungen werden im Normalfall ja immer wieder überschreiben. Zum Debuggen kann es aber ganz sinnvoll sein, einem Book-Objekt anzusehen, dass es auf diese Weise erzeugt und nicht wirklich vollständig initialisiert worden ist).
 

GetIT

Mitglied
:D Danke euch allen :D

Der default Konstruktor hat gefehlt!!

[schild=1 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]DANKE!!![/schild]
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Axis2 Webservice mit Client Zertifikat Authentifizierung Netzwerkprogrammierung 3
S Fragen zu Java Webservice mit Axis2 Netzwerkprogrammierung 0
R per Webservice mit GLS kommunizieren Netzwerkprogrammierung 2
L HTTP Restful Webservice Respone mit Null Body Netzwerkprogrammierung 3
H HTTP Rest Webservice mit Swagger Netzwerkprogrammierung 3
L Zugriffprobleme Client - Webservice AspenTechnology Netzwerkprogrammierung 0
T HTTP Eintragen in Webservice Netzwerkprogrammierung 1
S Webservice - Server Netzwerkprogrammierung 0
O Webservice: Telefonbuch (DB) Netzwerkprogrammierung 10
M Einfaches REST Webservice Beispiel Netzwerkprogrammierung 5
C Android: Json-POST Request zu REST Webservice Netzwerkprogrammierung 2
R Webservice und Bilder Netzwerkprogrammierung 29
C Webservice Frage Netzwerkprogrammierung 2
T Webservice als Client aufrufen Netzwerkprogrammierung 2
R Threads mit einem WebService Netzwerkprogrammierung 4
M Map über Webservice übertragen Netzwerkprogrammierung 3
K Programm als Webservice laufen lassen Netzwerkprogrammierung 5
S WebService, 4-stelliger String (Jahr) als Calendar Netzwerkprogrammierung 5
K Webservice: JAX-WS mit Tomcat5.x Netzwerkprogrammierung 2
K Webservice (Annotation) Netzwerkprogrammierung 2
H ArrayList via WebService übertragen Netzwerkprogrammierung 3
R Java webservice Serverpush Netzwerkprogrammierung 4
N NullPointerException in WebService Netzwerkprogrammierung 4
J Stubs für SOAP-Webservice generieren. Ich bekomme es einfach nicht hin... Netzwerkprogrammierung 3
O Webservice ohne Eclipse laufen lassen Netzwerkprogrammierung 3
C Webservice, ArrayList übergeben Netzwerkprogrammierung 3
5 Webservice max. mit 5 Clients möglich Netzwerkprogrammierung 10
G .Net Webservice in Java ansprechen Netzwerkprogrammierung 3
N Von WebService auf anderen WebService zugreifen? Netzwerkprogrammierung 8
K Axis2 Webservice Netzwerkprogrammierung 7
G Problem mit Webservice Netzwerkprogrammierung 5
S Google Search Webservice mit Apache Axis realisieren? Netzwerkprogrammierung 2
C Webservice von Java-Application aufrufen Netzwerkprogrammierung 3
G Webservice: Xml-Rpc: problem mit 2 webservices Netzwerkprogrammierung 3
E FTP FTPS Server gibt Fehlernachricht "522 SSL/TLS required on the data channel" zurück Netzwerkprogrammierung 1
Thalion Selector gibt nichts zurück Netzwerkprogrammierung 1
N Proxy gibt keine Antwort zurück Netzwerkprogrammierung 5
M ObjectOutputStream reset gibt IOException Netzwerkprogrammierung 4
R Server gibt "null" aus Netzwerkprogrammierung 2
P Wie gibt man einem GUI Programm ein Web interface? Netzwerkprogrammierung 5
B Upstream messen - gibt es da schon was fertig? Netzwerkprogrammierung 2
H Webserver mit PHP als Java-Programm, gibt es schon so etwas? Netzwerkprogrammierung 12
A Thread gibt Nachrichten mehrmals aus (Messenger in Java) Netzwerkprogrammierung 3
G TCP server empfängt falsche Werte !?!? Netzwerkprogrammierung 2
M Falsche Instanz vom Class Loader zurück bekommen Netzwerkprogrammierung 8
P getHostAddress() liefert falsche IP Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben