Announcement

Collapse
No announcement yet.

Axis2 eigene Objekte zurückgeben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Axis2 eigene Objekte zurückgeben

    Hallo liebe Community,

    Ich beschäftige mich derzeit mit den Grundlagen zu Webservices, dazu nutze ich den aktuellen Axis2 unter Tomcat 6.0.18.

    Ich habe mir zu Testzwecken 3 simple Java Klassen geschrieben,

    1. die eigentliche Webservice Klasse, sie hat die Methoden:
    - public boolean setCustomObject(CustomObject co)
    - public CustomObject getCustomObject()


    2. die Klasse "CustomObject", eine eifnache Bean mit einem byte als Datenelement, sowie einem Getter und einem Setter.

    3. die Client Klasse, hier versuche ich nun ein CustomObject an den Webservice zu senden und ein CustomObject vom Webservice zu erhalten, diese sieht wie folgt aus:

    Code:
    public class ObjectServiceClient {
    
    	public static void main(String[] args) {
    		
    		try {
    			
    			Service service = new Service();
    			Call call = (Call)service.createCall();
    			
    			String endpoint = "http://localhost:8080/axis2/services/ObjectService";
    			call.setTargetEndpointAddress(new URL(endpoint));
    			
    			//SETTER
    			CustomObject co = new CustomObject();
    			co.customData = 4;
    			
    			QName qn = new QName("http://webservice.fhsit.de", "setCustomObject");
    			call.registerTypeMapping(CustomObject.class, 
    					qn, 
    					org.apache.axis.encoding.ser.BeanSerializerFactory.class, 
    					org.apache.axis.encoding.ser.BeanDeserializerFactory.class);
    			call.setOperationName(qn);
    			boolean result = Boolean.parseBoolean(call.invoke(new Object[] {co}).toString());
    			System.out.println("setCustomObject(): " + result);
    			// ---
    			
    			//GETTER
    			call = (Call)service.createCall();
    			endpoint = "http://localhost:8080/axis2/services/ObjectService";
    			call.setTargetEndpointAddress(new URL(endpoint));
    
    			//getCustomObject
    			QName qnget = new QName("http://premiumservices.sit.fhg.de", "getCustomObject");
    			call.setReturnType(new QName("de.fhg.sit.premiumservices.CustomObject"));
    			call.registerTypeMapping(CustomObject.class, 
    					qnget, 
    					org.apache.axis.encoding.ser.BeanSerializerFactory.class, 
    					org.apache.axis.encoding.ser.BeanDeserializerFactory.class);
    			call.setOperationName(qnget);			
    			CustomObject customObjectResult = (CustomObject)call.invoke(new Object[] {});
    			System.out.println("getCustomObject(): " + customObjectResult);
    			
    		}
    		catch(Exception e) {
    			
    			e.printStackTrace();
    		}
    	}
    
    }
    setCustomObject() funktioniert einwandfrei, aber beim Versuch getCustomObject aufzurufen erhalte ich folgende Exception:

    Code:
    AxisFault
     faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
     faultSubcode: 
     faultString: org.xml.sax.SAXException: Deserializing parameter 'return':  could not find deserializer for type de.fhg.sit.premiumservices.CustomObject
     faultActor: 
     faultNode: 
     faultDetail: 
    	{http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXException: Deserializing parameter 'return':  could not find deserializer for type de.fhg.sit.premiumservices.CustomObject
    	at org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:277)
    	at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
    	at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
    	at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
    	at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:345)
    	at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
    	at org.apache.axis.client.Call.invoke(Call.java:2467)
    	at org.apache.axis.client.Call.invoke(Call.java:2366)
    	at org.apache.axis.client.Call.invoke(Call.java:1812)
    	at de.fhsit.webservice.ObjectServiceClient.main(ObjectServiceClient.java:91)
    Scheinbar funktioniert der BeanDeserializer also nicht mit meiner CustomObject Klasse, nur irritiert mich warum er beim Aufruf von setCustomObject nicht meckert. Trotz längerer Suche im Netz habe ich keine Antwort auf dieses Problem gefunden. Ich würde mich sehr freuen wenn mir hier jemand helfen könnte.

    mfg Unic
Working...
X