2011-08-22 18 views
7

Tengo el servicio web ordinario de Microsoft y el CXF normal de la versión más reciente con Java/JDK 1.6, Eclipse, etc. Cuando ejecuto wsdl2java, la pieza JAXB arroja un error "lanzada por JAXB: declaración de elemento indefinido 's: esquema'"Servicio web de Microsoft y cliente CXF: JAXB no puede entender "s: schema"

La parte de wich WSDL provoca que parece:

<s:element name="GetDepartmentsResponse"> 
<s:complexType> 
    <s:sequence> 
    <s:element minOccurs="0" maxOccurs="1" name="GetDepartmentsResult"> 
    <s:complexType> 
    <s:sequence> 
     <s:element ref="s:schema" /> 
     <s:any /> 
    </s:sequence> 
    </s:complexType> 
    </s:element> 
    </s:sequence> 
</s:complexType> 
</s:element> 

¿Puedo simplemente retire <s:element ref="s:schema" /> todas partes y mantener <s:any/>? Parece un obstáculo común para Java < -> Microsoft webservices intreroperability. Pero no puedo encontrar ninguna solución para CXF.

Gracias

Respuesta

7

Por lo general, se puede quitar el árbitro esquema. Es posible que necesite cambiar <s:any> a <s:any maxOccurs="2"> o similar para asegurarse de que hay espacio para el elemento de esquema y para todo lo que lo sigue.

0

Personalmente, no recomendaría modificar su WSDL. El WSDL está definiendo el contrato impuesto por el servicio, y no es realmente algo que deba cambiar en su cliente. Si echa un vistazo a la respuesta aquí https://stackoverflow.com/a/19126124/1732319 describe cómo puede obtener wsdl2java para ocuparse de s:schema correctamente.

estoy usando el plugin codegen experto CXF en mi proyecto y tienen la siguiente configuración:

<configuration> 
    <fork>once</fork> 
    <additionalJvmArgs>-Djavax.xml.accessExternalDTD=all -Djavax.xml.accessExternalSchema=all</additionalJvmArgs> 
    <sourceRoot>${project.build.directory}/generated-sources</sourceRoot> 
    <wsdlRoot>${basedir}/src/main/resources/wsdl</wsdlRoot> 
    <defaultOptions> 
     <bindingFiles> 
      <bindingFile>http://www.w3.org/2001/XMLSchema.xsd</bindingFile> 
      <bindingFile>${basedir}/src/main/resources/customisation.xjb</bindingFile> 
     </bindingFiles> 
    </defaultOptions> 
</configuration> 

customisation.xjb se toma de la respuesta referencias que anteriormente.

Cuestiones relacionadas