2013-03-19 22 views
6

Zamierzam zastąpić dostarczoną kompilację Ant z Mavenem. Znam (ale nie użyłem) mrówki, a ja też nie chcę.Jak zbudować WSDL za pomocą Mavena

W skrócie, NetSuite dostarcza klucz wsdl, który jest używany podczas wykonywania wywołań usług sieciowych w stosunku do jego oferty ERP, a ja obecnie używam dostarczonej przez nią wersji ant do generowania klas proxy z pliku wsdl. (Przykładowe aplikacje, WSDL i oś poprawionych dostępny here)

Mam problem jest to, że mrówka zadanie wykorzystuje poprawione oś 1.4 (i wspierających biblioteki, z których kilka jest ~ 7 lat) i chciałbym wdrożyć ten plik wsdl wykorzystuje biblioteki, które są łatwo dostępne z centralnego repozytorium maven, a najlepiej obecne.

Czy ktoś może wskazać mi, gdzie muszę znaleźć rozwiązanie, które zadziała?

Dla wszystkich, którzy potrzebują wiedzieć: Mam próbował generowanie z axis2 i rzuca następujący wyjątek:

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 

punkty, jeśli jest to sprawdzone rozwiązanie z niedawnym NetSuite WSDL.

Odpowiedz

12

Proponuję Ci cxf maven plugin. Zrobiłem mały test z this wsdl i wygenerowałem i skompilowałem pomyślnie pliki źródłowe (JVM 1.7) 1408. (bądź cierpliwy, to trwa chwilę ...)

Dostaję tylko kilka ostrzeżeń o osiągnięciu maksymalnego rozmiaru enum. Musiałem więc przekazać plik wiążący, aby umożliwić większe wyliczenia. Zrobiłem to poprzez plik wiążący. Dzięki this post

Oto wymagane bind.xml plik

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

A odpowiednia część pom.xml (jak widać: WSDL i bind.xml są w /src/main/resources)

<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

Dzięki Ben Właściwie sam robię manualne testowanie CXF i używam dokładnie tego samego wiązania, aby obsłużyć problem z enum teraz :) Dzięki za pom - to będzie wielka pomoc. –

Powiązane problemy