Hi!
Habe meine WSDL Definition versucht ein bischen flexibler zu machen. Statt einer konkreten Klasse übergebe ich in der Nachricht die abstrakte Klasse AbstractMyClass:
[XML]
<wsdl:types>
<xsd:complexType name="AbstractMyClass" abstract="true">
<xsd:sequence>
<xsd:element name="mystring" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</wsdl:types>
<wsdl:message name="SendAbstractMyClassRequest">
<wsdlart name="parameters" type="test:AbstractMyClass"/>
</wsdl:message>
[/XML]
Diese implementiere ich dann einfach selbst in Eclipse (Sinn: damit beim Ausführen von WSDL2JAVA immer nur alle abstrakten Klassen überschrieben werden und ich meine Logic in der Implementierung nicht verliere!):
Nun wurde noch eine Operation 'sendAbstractMyClassRequest' im WSDL definiert und dann der Code mit WSDL2Java generiert. Resultat im generierten ServiceInterface:
Die Servicemethode rufe ich dann natürlich mit meiner konkreten MyClass im Client auf:
Das liefert mir dann leider folgende Exception:
Was kann ich hier tun? Ist diese Vorgehensweise überhaupt möglich?
Ich nutze CXF, Spring, Tomcat 6.x.
Habe meine WSDL Definition versucht ein bischen flexibler zu machen. Statt einer konkreten Klasse übergebe ich in der Nachricht die abstrakte Klasse AbstractMyClass:
[XML]
<wsdl:types>
<xsd:complexType name="AbstractMyClass" abstract="true">
<xsd:sequence>
<xsd:element name="mystring" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</wsdl:types>
<wsdl:message name="SendAbstractMyClassRequest">
<wsdlart name="parameters" type="test:AbstractMyClass"/>
</wsdl:message>
[/XML]
Diese implementiere ich dann einfach selbst in Eclipse (Sinn: damit beim Ausführen von WSDL2JAVA immer nur alle abstrakten Klassen überschrieben werden und ich meine Logic in der Implementierung nicht verliere!):
Java:
com.mycompany.test;
public class MyClass extends AbstractMyClass{
public MyClass () {
super();
}
}
Nun wurde noch eine Operation 'sendAbstractMyClassRequest' im WSDL definiert und dann der Code mit WSDL2Java generiert. Resultat im generierten ServiceInterface:
Java:
public String sendAbstractMyClassRequest(
@WebParam(partName = "parameters", name = "parameters", targetNamespace = "http:mycompany.com/test")
com.mycompany.test.AbstractMyClass parameters
);
Die Servicemethode rufe ich dann natürlich mit meiner konkreten MyClass im Client auf:
Java:
MyClass myclass = new MyClass();
service.sendAbstractMyClassRequest(myclass);
Das liefert mir dann leider folgende Exception:
Java:
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Unmarshalling Error: Unable to create an instance of com.mycompany.test.MyClass
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:218)
at $Proxy35.sendPushAbstractLabelRequest(Unknown Source)
Was kann ich hier tun? Ist diese Vorgehensweise überhaupt möglich?
Ich nutze CXF, Spring, Tomcat 6.x.
Zuletzt bearbeitet: