2011-11-29 17 views
9

Mam następujący typ danych zdefiniowany w WSDL:zmiana pakiet generowanej klasy JAXB

<?xml version="1.0" encoding="UTF-8"?> 
<wsdl:definitions name="myService" targetNamespace="http://example.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://example.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"> 
    <wsdl:types> 
     <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="example.com" targetNamespace="example.com" version="1.0"> 
      <xs:simpleType name="MyEnum"> 
       <xs:restriction base="xs:string"> 
        <xs:enumeration value="one"/> 
        <xs:enumeration value="two"/> 
       </xs:restriction> 
      </xs:simpleType> 
      <!-- SNIP other data types --> 
     </xs:schema> 
    </wsdl:types> 
</wsdl:definitions> 

Chcę MyEnum wpaść w swoim pakiecie. Więc użyłem JAXWS plik wiążące i stosowane XPATH przemierzać schematu i JAXB powiązania ustawić pakiet, co następuje:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<jaxws:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://java.sun.com/xml/ns/jaxws"> 
    <jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='example.com']"> 
     <jxb:schemaBindings> 
      <jxb:package name="abra.ca.dabra" /> <!-- this works, and changes package of all classes in the namespace--> 
     </jxb:schemaBindings> 
     <jxb:bindings node="//xs:simpleType[@name='MyEnum']"> 
      <jxb:package name="a.b.c"/> <!-- this does not work --> 
     </jxb:bindings> 
    </jaxws:bindings> 
    <!-- SNIP - other functional jaxws bindings --> 
</jaxws:bindings> 

Teraz ścieżka ustawiona w schemaBindings trwa - i stawia wszystkie typy danych z tego schema/targetnamespace do pakietu abra.ca.dabra. Jednak nie mogę ustawić pakietu MyEnum - tego właśnie chcę.

Używam wsdl2java cxf do dostarczenia pliku powiązań. Czy czegoś brakuje?

+0

natknąłem same kwestia. Czy rozwiązałeś swoje? – Rudy

+0

Plik powiązania jest niepoprawny: prefiks przestrzeni nazw 'jaxws' nie jest powiązany z żadną przestrzenią nazw. – whaefelinger

+0

Podobny przedrostek "xs" nie jest związany. – whaefelinger

Odpowiedz

0

Czy próbowałeś dodać drugi schemat do WSDL, który zawiera tylko MyEnum, z innym obszarem nazw? Oryginalna definicja schematu powinna następnie zaimportować ten typ z nowej przestrzeni nazw.

2

chciałbym spróbować z czymś dużej litery:

<jaxws:bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"> 

<jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle> 

<!-- set default package structure --> 
<jaxws:package name="abra.ca.dabra" /> 

<!-- set package structure for complex schema types --> 
<jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema/xs:simpleType[@name='MyEnum']"> 
    <jaxb:schemaBindings> 
     <jaxb:package name="a.b.c" /> 
    </jaxb:schemaBindings> 
</jaxws:bindings> 

Aby być bardziej precyzyjnym należy uczynić cały WSDL dostępne

nadzieję, że to pomaga ...