2011-08-22 13 views
7

Normal Microsoft web servisi ve normal CXF'nin Java/JDK 1.6, Eclipse vb. Ile en son sürümüne sahibim. Wsdl2java'yı çalıştırdığımda, JAXB bölümü bir hata atar "JAXB tarafından atılır: tanımsız eleman bildirimi 'ler: şema'"Microsoft webservice ve CXF istemcisi: JAXB "s: şema" anlamıyor.

wsdl wich parçası gibi görünüyor nedenleri:

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

Ben sadece her yerde <s:element ref="s:schema" /> kaldırıp <s:any/> kalabilir mi? Bu, Java < için sık karşılaşılan engel gibi görünüyor -> Microsoft web hizmetleri denetlenebilirliği. Ancak CXF için herhangi bir geçici çözüm bulamıyorum.

Eğer

cevap

7

Genellikle şema ref kaldırabilirsiniz ederiz. <s:any>'u <s:any maxOccurs="2">'a veya benzer şekilde hem şema öğesine hem de onu takip eden herhangi bir öğeye yer olduğundan emin olmanız gerekebilir.

0

Kişisel olarak, WSDL'nizi değiştirmenizi önermezdim. WSDL, hizmet tarafından uygulanan sözleşmeyi tanımlar ve müşterinizde değişmesi gereken bir şey değildir. https://stackoverflow.com/a/19126124/1732319 cevabına bir göz attığınızda, wsdl2java'u s:schema ile nasıl düzgün şekilde ele alabileceğinizi açıklar.

Projemde CXF codegen maven eklentisi kullanarak ve aşağıdaki yapılandırmaya sahip ediyorum:

<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 Ben referanslar yukarıdaki cevap alınır.