2012-01-30 16 views
12

Moim celem jest stworzenie klienta, serwis internetowy, który działa w osobnym słoiku z wszystkie zależności przy użyciu mvn montaż: pojedynczyapache cxf obciążenia klienta grzywny w Eclipse, ale samodzielny słoiku rzuca NullPointerException w WSDLServiceFactory

I generowane klienta za pomocą CXF Codegen wsdl2java, tworząc @WebServiceClient nazwie NetBanxAutostatementService

w zależności mam

<cxf.version>2.5.2</cxf.version> 
</properties> 
<dependencies> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-frontend-jaxws</artifactId> 
     <version>${cxf.version}</version> 
     <scope>runtime</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-transports-http</artifactId> 
     <version>${cxf.version}</version> 
     <scope>runtime</scope> 
    </dependency> 

rozpaczliwie próbowałem nawet dodać więcej "rzeczy"

<dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-core</artifactId> 
     <version>2.5.2</version> 
     <scope>runtime</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf</artifactId> 
     <version>2.5.2</version> 
     <type>pom</type> 
     <scope>runtime</scope> 
    </dependency> 

Problem: za każdym razem próbuję uruchomić "java -jar target/Netbanx-0.0.1-SNAPSHOT-jar-z-dependencies.jar"

INFO [main] (Netbanx.java:97) - autostatement_wsdlLocation:https://www.test.netbanx.com/cgi-bin/autostatement_wsdl 
Exception in thread "main" java.lang.NullPointerException 
at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:92) 
at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:204) 
at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:148) 
at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:91) 
at javax.xml.ws.Service.<init>(Service.java:56) 
at com.netbanx.autostatement.NetBanxAutostatementService.<init> (NetBanxAutostatementService.java:39) 
at my.project.netbanx.Netbanx.<init>(Netbanx.java:98) 
at my.project.netbanx.Netbanx.main(Netbanx.java:130) 

Dzieje się w linii, która wywołuje WebServiceClient autostatementService = new NetBanxAutostatementService (autostatement_wsdlLocation); wiem linią dziennika, że ​​nie jestem przechodzącej autostatement_wsdlLocation za nieważną

kod Java:

URL autostatement_wsdlLocation = null; 
URL payment_wsdlLocation = null; 
try { 
    autostatement_wsdlLocation = new URL(properties.getProperty("autostatement_wsdlLocation")); 
    payment_wsdlLocation = new URL(properties.getProperty("payment_wsdlLocation")); 
} catch (MalformedURLException e) { 
    logger.error("MalformedURLException",e); 
} 

    /** 
    * Load the Netbanx's webservices AutostatementService and PaymentService 
    */ 
try {   
    logger.info("autostatement_wsdlLocation:"+autostatement_wsdlLocation.toString()); 
    autostatementService = new NetBanxAutostatementService(autostatement_wsdlLocation); //it is here I get the NullPointerException error 
    logger.info("payment_wsdlLocation:"+payment_wsdlLocation.toString()); 
    paymentService = new NetBanxPaymentService(payment_wsdlLocation); 
webServiceStarted = true; 
    } catch(javax.xml.ws.WebServiceException wsException){ 
     String error = "Cannot create NetBanx web service please make sure this host can reach:" + autostatement_wsdlLocation +" and " + payment_wsdlLocation; 
     logger.error(error); 
     logger.error("WebServiceException",wsException); 

}

+0

Czy możemy też kod java? – thatidiotguy

+0

NetBanxAutostatementService to klasa generowana przez CFX, którą mogę dodać również. Ten kod działa dobrze w środowisku Eclipse, więc myślę, że brakuje mi zależności do dodania do pliku JAR. Próbowałem już dodać konfigurację Spring cxf.xml, ale mam ten sam błąd. –

+0

Hmm, naprawdę nie sądzę, że jest to problem z ładowaniem klasowym, ponieważ dałoby to wyjątek ClassNotFound, a nie wskaźnik zerowy. Widzę, że WSDLServiceFactory ma więcej niż jeden argument w swoich konstruktorach, ale nie mówi, że wygenerowałby wyjątek nullpointer na podstawie dokumentacji tutaj: http://cxf.apache.org/apidocs/org/apache/cxf/wsdl11 /WSDLServiceFactory.html. Spróbuj pobrać kod źródłowy i spojrzeć na 92 ​​i zobaczyć, co go powoduje. Im z sugestii przepraszam. – thatidiotguy

Odpowiedz

17

Najprawdopodobniej jest to w jaki sposób tworzysz swój jeden słoik. Normalne użycie wtyczki zespołu nie pozwoli na to, aby różne części materiałów CXF META-INF/* musiały zostać połączone. To obejmowałoby wszystkie/META-INF/spring * i wiele rzeczy w/META-INF/cxf/* Sugerowałbym użycie wtyczki cienia do tego. Zobacz przykład pom.xml dla słoika pakunku CXF.

http://svn.apache.org/repos/asf/cxf/trunk/osgi/bundle/all/

+0

W jaki sposób wtyczka do cieni wie, skąd wziąć ten typ zasobów? ' META-INF/wsdl.plugin.xml' –

+1

Zmiana wtyczki cienia i dodanie wszystkich AppendingTransformer i XmlAppendingTransformer (y) z pliku pom.xml w linku rozwiązało mój problem. Myślę, że winowajcą był ' \t \t \t \t \t \t \t META-INF/wsdl.plugin .xml \t \t \t \t \t \t ' –

+0

Dzięki, to naprawdę uratował mi tyłek! Zauważ, dokładnie tak, jak z powyższego "AppendingTransformer" i "XmlAppendingTransformer" to rzeczy, które chcesz, a nie "PluginTransformer" lub "CXFAllTransformer" - Zrobiłem ten błąd na początku, twój projekt * prawdopodobnie * nie będzie budowany z tymi zawartymi . Pokój! – demaniak

3

Należy starać z jednej wtyczki słoik, to niech Ci stworzyć fajne słoiki, które są czyste i totalnie samowystarczalny

http://code.google.com/p/onejar-maven-plugin/

+1

To podejście działa, ale chciałem stworzyć słoik z moją klasą będącą Klasą Główną, a nie com.simontuffs.onejar.Boot –

15

Rozszerzając @ odpowiedź DanielKulp, która pracowała potraktuj dla mnie CXF 2.7.7 (na wypadek gdyby link umarł). Skonfiguruj swój odcień wtyczki z następujących dodatkowych transformatorów:

<configuration> 
    <transformers> 
    <!-- transformers for CXF (see http://stackoverflow.com/a/9069435/61298) --> 
    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
     <resource>META-INF/spring.handlers</resource> 
    </transformer> 
    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
     <resource>META-INF/services/com.sun.tools.xjc.Plugin</resource> 
    </transformer> 
    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
     <resource>META-INF/spring.schemas</resource> 
    </transformer> 
    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
     <resource>META-INF/cxf/cxf.extension</resource> 
    </transformer> 
    <transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer"> 
     <resource>META-INF/extensions.xml</resource> 
    </transformer> 
    <transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer"> 
     <resource>META-INF/cxf/extensions.xml</resource> 
    </transformer> 
    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
     <resource>META-INF/cxf/bus-extensions.txt</resource> 
    </transformer> 
    <transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer"> 
     <resource>META-INF/cxf/bus-extensions.xml</resource> 
    </transformer> 
    <transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer"> 
     <resource>META-INF/wsdl.plugin.xml</resource> 
    </transformer> 
    <transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer"> 
     <resource>META-INF/tools.service.validator.xml</resource> 
    </transformer> 
    <transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer"> 
     <resource>META-INF/cxf/java2wsbeans.xml</resource> 
    </transformer> 
    </transformers> 
</configuration> 
+0

Szukałem jak pół dnia. Dziękuję bardzo! – ooxi

0

W uzupełnieniu odpowiedzi @Matt R, w Wymieniłem część POM z maven montaż plugin z tym kodem:

<plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <mainClass>com.xxx.App</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>3.0.0</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <transformers> 
          <!-- transformers for CXF (see http://stackoverflow.com/a/9069435/61298) --> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
           <resource>META-INF/spring.handlers</resource> 
          </transformer> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
           <resource>META-INF/services/com.sun.tools.xjc.Plugin</resource> 
          </transformer> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
           <resource>META-INF/spring.schemas</resource> 
          </transformer> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
           <resource>META-INF/cxf/cxf.extension</resource> 
          </transformer> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer"> 
           <resource>META-INF/extensions.xml</resource> 
          </transformer> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer"> 
           <resource>META-INF/cxf/extensions.xml</resource> 
          </transformer> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
           <resource>META-INF/cxf/bus-extensions.txt</resource> 
          </transformer> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer"> 
           <resource>META-INF/cxf/bus-extensions.xml</resource> 
          </transformer> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer"> 
           <resource>META-INF/wsdl.plugin.xml</resource> 
          </transformer> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer"> 
           <resource>META-INF/tools.service.validator.xml</resource> 
          </transformer> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.XmlAppendingTransformer"> 
           <resource>META-INF/cxf/java2wsbeans.xml</resource> 
          </transformer> 
         </transformers> 
         <filters> 
          <filter> 
           <artifact>*:*</artifact> 
           <excludes> 
            <exclude>META-INF/*.SF</exclude> 
            <exclude>META-INF/*.DSA</exclude> 
            <exclude>META-INF/*.RSA</exclude> 
           </excludes> 
          </filter> 
         </filters> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Wyklucz częścią jest zapobieganie problemom związanym z bezpieczeństwem Java.

Powiązane problemy