2011-08-22 11 views
7

Ho ordinario servizio web Microsoft e CXF normale dell'ultima versione con Java/JDK 1.6, Eclipse ecc. Quando eseguo wsdl2java, la parte JAXB genera un errore "lanciata da JAXB: undefined dichiarazione di elemento 's: schema'"Microsoft webservice e client CXF: JAXB non riesce a capire "s: schema"

La parte del wich WSDL provoca assomiglia:

<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> 

Posso semplicemente rimuovere <s:element ref="s:schema" /> ovunque e mantenere <s:any/>? Sembra un ostacolo comune per Java < -> intreroperabilità dei servizi Web Microsoft. Ma non riesco a trovare alcuna soluzione alternativa per CXF.

Grazie

risposta

7

Di solito è possibile rimuovere il rif schema. Potrebbe essere necessario modificare <s:any> in <s:any maxOccurs="2"> o simile per assicurarsi che ci sia spazio per entrambi gli elementi dello schema e tutto ciò che lo segue.

0

Personalmente, non suggerirei di modificare il tuo WSDL. Il WSDL sta definendo il contratto imposto dal servizio e non è qualcosa che dovresti cambiare nel tuo cliente. Se dai un'occhiata alla risposta qui https://stackoverflow.com/a/19126124/1732319 descrive come puoi ottenere wsdl2java per gestire correttamente s:schema.

Sto usando il plugin Maven codegen CXF nel mio progetto ed hanno la seguente configurazione:

<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 è tratto dalla risposta che i riferimenti di cui sopra.

Problemi correlati