2013-03-19 17 views
6

Maven ile birlikte verilen bir Ant yapısını değiştirmek istiyorum. Karınca koştuğunu biliyorum ama kullanmadım.Maven kullanarak bir WSDL nasıl oluşturulur

NetSuite, ERP teklifine karşı web hizmeti çağrıları yaparken kullanması gereken bir wsdl sağlar ve şu anda wsdl'den proxy sınıflarını oluşturmak için sağladığım karınca yapısını kullanıyorum. (örnek uygulamalar, wsdl ve yama ekseni mevcut here)

Sahip olduğum problem, karınca görevinin yamalı bir eksen 1.4 (ve birkaçını 7 yaşından büyük olan destekleyici kütüphaneler) kullanması ve uygulamak istiyorum. Bu, bir merkezi maven repodan ve tercihen akımdan kolayca temin edilebilen kütüphaneleri kullanarak.

Çalışacak bir çözüm araştırmam gereken yere kimse işaret edebilir mi? veren kim herhangi İçin

: Ben axis2 ile üreten teşebbüs ettik ve aşağıdaki istisna atar: onun bir son NetSuite WSDL ile çözüm test

timeException: Element QName is null for ExceededRequestSizeFault! 
     at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGenerationEngine.java:293) 
     at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:35) 
     at org.apache.axis2.wsdl.WSDL2Java.main(WSDL2Java.java:24) 
Caused by: org.apache.axis2.wsdl.codegen.CodeGenerationException: java.lang.RuntimeException: Element QName is null for ExceededRequestSizeFault! 
     at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.emitSkeleton(AxisServiceBasedMultiLanguageEmitter.java:1451) 
     at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGenerationEngine.java:275) 
     ... 2 more 
Caused by: java.lang.RuntimeException: Element QName is null for ExceededRequestSizeFault! 
     at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.getFaultParamElements(AxisServiceBasedMultiLanguageEmitter.java: 
2925) 
     at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.getFaultElement(AxisServiceBasedMultiLanguageEmitter.java:2844) 
     at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.generateMethodElement(AxisServiceBasedMultiLanguageEmitter.java: 
2366) 
     at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.loadOperations(AxisServiceBasedMultiLanguageEmitter.java:2242) 
     at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.createDOMDocumentForSkeleton(AxisServiceBasedMultiLanguageEmitte 
r.java:2156) 
     at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.writeSkeleton(AxisServiceBasedMultiLanguageEmitter.java:2082) 
     at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.emitSkeleton(AxisServiceBasedMultiLanguageEmitter.java:1408) 
     ... 3 more 

Bonus puanlar eğer.

cevap

12

Size cxf maven plugin'u öneririm. this wsdl ile küçük bir test yaptım ve başarıyla (JVM 1.7) 1408 kaynak dosyaları oluşturup derleyin. (sabırlı olun, bir süre alır ...)

Ulaşılan maksimum enum boyutu hakkında sadece birkaç uyarı alıyorum. Ve böylece daha büyük enumlar sağlamak için bir bağlayıcı dosya geçmek zorunda kaldı. Bağlama dosyası ile yaptım. this post İşte

sayesinde dosya bind.xml gereklidir

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      jaxb:version="2.0"> 
    <jaxb:bindings > 
     <jaxb:globalBindings typesafeEnumMaxMembers="2000"/> 
    </jaxb:bindings> 
</jaxb:bindings> 

Ve (Gördüğünüz gibi: wsdl ve bind.xml /src/main/resources içindedir) pom.xml ilgili kısmı

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-codegen-plugin</artifactId> 
      <version>2.7.3</version> 
      <executions> 
       <execution> 
        <id>generate-sources</id> 
        <phase>generate-sources</phase> 
        <configuration> 
         <sourceRoot>${project.build.directory}/generated/cxf</sourceRoot> 
         <wsdlOptions> 
          <wsdlOption> 
           <bindingFiles> 
            <bindingFile>${basedir}/src/main/resources/bind.xml</bindingFile> 
           </bindingFiles> 
           <wsdl> 
            ${basedir}/src/main/resources/netsuite.wsdl 
           </wsdl> 
          </wsdlOption> 
         </wsdlOptions> 
        </configuration> 
        <goals> 
         <goal>wsdl2java</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
+0

Teşekkür Ben , aslında ben manuel CXF testi kendim yapıyorum ve şu anda enum sorunu işlemek için tam olarak aynı bağlama kullanıyorum :) Pom için teşekkürler - bu büyük bir yardım olacak. –