CXF webservice code-first ist das erstellen von wsdl-mit xs:element form="unqualified" nicht Abholung namespace
Ich bin erstellen von Web Services mit CXF mit den code-first-Ansatz.
Ich möchte namespaces verwenden, und daher elementFormDefault eingestellt ist wahr.
Die WSDL ist gut, außer für die Elemente, eingebettet in die complextypes, bekomme ich folgende xs:element mit einer form="unqualified" tag. Aber ich möchte, um loszuwerden, das form=unqualifizierten tag
<xs:element form="unqualified" name="LikeSearch" type="xs:boolean"/>
Meine package-info.java sieht wie folgt aus:
@javax.xml.bind.annotation.XmlSchema(namespace="http://registry.erpel.at",
attributeFormDefault=javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
elementFormDefault=javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package at.erpel.registry.services.webservice;
Java Endpunkt sieht folgendermaßen aus:
@WebService(targetNamespace = "http://registry.erpel.at", name="CompanyEndpoint")
public interface CompanyEndpoint {
List<Company> findCompanies(
@WebParam(name = "FindCompaniesRequest") @XmlElement(required=true) FindCompaniesRequest findCompaniesRequest)
throws ServiceFault ;
Dies ist die FindCompaniesRequest:
@XmlRootElement(name = "FindCompaniesRequest")
public class FindCompaniesRequest extends AbstractRequestType implements Serializable
{
@XmlElement(name = "LikeSearch", required = true)
protected boolean likeSearch;
...
}
Und schließlich die WSDL:
<xs:complexType name="FindCompaniesRequest">
<xs:complexContent>
<xs:extension base="tns:AbstractRequestType">
<xs:sequence>
<xs:element form="unqualified" name="LikeSearch" type="xs:boolean"/>
Was ich will, ist, um loszuwerden, das form="unqualified" tag
Die einzige Lösung, die ich bis jetzt gefunden habe ist das hinzufügen der Namensraum-Attribut auf jedes einzelne XMLElement:
@XmlElement(name = "LikeSearch", required = true, namespace="http://registry.erpel.at")
protected boolean likeSearch;
Aber ich will die Kind-Elemente nur zum abholen der namespace aus der übergeordneten Elemente. Ich habe versucht, indem die Namensraum-Attribut der @XMLRootElement annotation @WebParam-annotation und der @XmlElement-annotation in der Methode Beschreibung, aber ohne Erfolg.
Jemand weiß, wie man mit dieser arbeiten?
FindCompaniesRequest
? Wenn es nicht at.erpel.registry.services.webservice
, ist das dein problem genau dort. Auch, was das Paket ist CompanyEndpoint
?CompanyEndpoint ist.erpel.Registrierung.services.webservice-und FindCompaniesRequest ist.erpel.Registrierung.services.Personen.Anfrage, So haben Sie beide im selben Paket dann? oder gibt es eine andere Lösung?
Dank Donal ich habe die Lösung gefunden, ich habe bis package-info.java in Paket enthält Klassen, die für die Generierung der WSDL. In meinem Fall, ich hatte auch um Sie in die Paket FindCompaniesRequest! Vielen Dank, Donal! P. S. ich kann die Frage nicht beantworten jetzt, denn es ist meine erste, und das system braucht mich warten, 7 Stunden, Donal, vielleicht möchten Sie eine Antwort für mich 😉 thx
Es war so einfach? OK, Umgerechnet auf eine Antwort. 🙂
InformationsquelleAutor ddawg | 2011-07-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
package-info.java
- Datei kann nur erklären, JAXB standardmäßig für die Klassen im gleichen Paket; Sie haben einen in jeder Paket, das wird nachgerüstet, das zu tun, Klasse generation (oder definieren Sie eine ganze Menge mehr Attribute von Anmerkungen, die nicht viel Spaß).Zum Glück, das ist ziemlich viel cut-n-paste-coding. Kopieren Sie nur ein einzelnes Paket-info-Datei um und ändern Sie es, wenn Sie wollen, den namespace zu ändern.
elementFormDefault=javax.xml.bind.annotation.XmlNsForm.QUALIFIED
Aber in meinen Antworten bin ich immer ein unqualifizierter name space.InformationsquelleAutor Donal Fellows