Können abstrakte Klassen über WSDL versendet werden?

Status
Nicht offen für weitere Antworten.

pocketom

Bekanntes Mitglied
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">
<wsdl:part 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:

pocketom

Bekanntes Mitglied
So wie es aussieht kann man auch keine Klassen verschicken die abstrakte Klassen aggregieren? Ich frage mich wirklich wie ich nur meine abstrakten Basisklassen mit WSDL2Java generieren kann. Momentan besteht mein gesamtes XML Schema nur aus abstrakten Typen, sobald ich auch die Implementationen der ganzen abstrakten Klassen im Schema definiere überschreibt es mir bei jeder Codegenerierung alle Klassen. Ich möchte aber das nur die abstrakten Klassen neu generiert und überschrieben werden. Hat irgendwer hier einen Tip wie ich das machen kann?

In der CXF Doku findet sich folgendes:

-nexclude schema-namespace [=java-packagename] Ignore the specified WSDL schema namespace when generating code. This option may be specified multiple times. Also, optionally specifies the Java package name used by types described in the excluded namespace(s).

Ist das der richtige Ansatz?
 

pocketom

Bekanntes Mitglied
Also, -nexclude ist wohl verbuggt.

Habe folgendes in meine WSDL2JAVA config getan:
[xml]
<wsdlOption>
<extraargs>
<extraarg>-nexclude</extraarg>
<extraarg>http:/mycomany.com/testnamespace</extraarg>
</extraargs>
</wsdlOption>
[/xml]

Damit werden alle Klassen im Namespace 'http:/mycomany.com/testnamespace' bei der Codegeneration ignoriert.
Leider werden aber auch alle bereits existierenden Klassen komplett gelöscht (das gesamte Package wird gelöscht)!!!

*AAARGGHHHHH*
 

pocketom

Bekanntes Mitglied
Lösung gefunden:

[xml]
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
...
...
...
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
>

<xsd:annotation>
<xsd:appinfo>
<jaxb:schemaBindings map="false"/>
</xsd:appinfo>
</xsd:annotation>
...
...
...
</xsd:schema>
[/xml]

Es wäre dennoch wesentlich einfacher und schöner wenn man das selbe mit der -nexclude Option direkt mit WSDL2Java lösen könnte (einfach nur einmal in die pom.xml einbauen)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D JSF-Tags können nicht aufgelöst werden ? Allgemeines EE 2
M Web Anwendung soll auf Basisobjekte zugreifen können Allgemeines EE 2
B Tomcat --- Können sich JARs in WARs beissen? Allgemeines EE 3
pkm Root resource - Klassen werden nicht gefunden. Allgemeines EE 2
K Spring Namensgebung bei Klassen Allgemeines EE 7
L Sessions - Unterschiedlich in verschiedenen Klassen? Allgemeines EE 4
R JAVA EE - eigene Klassen aus EJB übernehmen Allgemeines EE 2
J Einige Klassen werden nicht resolved Allgemeines EE 7
P Mit JAXB erzeugte Klassen persistieren (Hibernate) Allgemeines EE 10
I Klassen werden nicht für Import erkannt eclipse EE Allgemeines EE 2
S In Eclipse werden die "Servlet-Klassen" nicht gefu Allgemeines EE 2
N Lokation von Bean Klassen? Allgemeines EE 5
N Reflektion und die Liste abgeleiteter Klassen/Interfaces Allgemeines EE 6
M TagLib und Referenzen zwischen Klassen Allgemeines EE 4
M Servlets | work - Klassen nicht im WAR File Allgemeines EE 5
P JSP Servlets/ Java Klassen für FTP FileUpload (Bilder) + DB Allgemeines EE 3
D Controller-Klassen eines Servlets testen mit JUnit Allgemeines EE 3
F Klassen und zugriffs Problem "Help wanted"! Allgemeines EE 16
M HTML-Klassen Allgemeines EE 2
S JSP auch mit Klassen? Allgemeines EE 2
K JSP anfänger. auf eigene klassen zu greifen Allgemeines EE 8
S zugriff von jsp-seiten auf java klassen Allgemeines EE 3

Ähnliche Java Themen

Neue Themen


Oben