2013-01-11 11 views
5

Sto tentando di eseguire la mia applicazione che contiene JAX WS (2.1) Webservice utilizzando JDeveloper 11g R2 (11.1.2.3.0) in JDK 1.6.0_31-b05. L'errore proviene dall'annotazione di @WebService presente sulla classe.
Quando sto facendo funzionare l'applicazione, sto ottenendo sotto l'errore,Eccezione annotazione @Webservice su weblogic

java.lang.IllegalArgumentException: Argument(s) "type" can't be null. 
    at com.sun.xml.bind.api.TypeReference.<init>(TypeReference.java:89) 
    at com.sun.xml.ws.model.RuntimeModeler.processDocWrappedMethod(RuntimeModeler.java:758) 
    at com.sun.xml.ws.model.RuntimeModeler.processMethod(RuntimeModeler.java:678) 
    at com.sun.xml.ws.model.RuntimeModeler.processClass(RuntimeModeler.java:428) 
    at com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:277) 
    at com.sun.xml.ws.server.EndpointFactory.createSEIModel(EndpointFactory.java:363) 
    at com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:202) 
    at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:496) 
    at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:539) 
    at weblogic.wsee.jaxws.JAXWSDeployedServlet.getEndpoint(JAXWSDeployedServlet.java:183) 

Sembra che incorporato logica Web utilizza le librerie interne anziché fornito uno da JDK. Le classi RuntimeModeler o TypeReference sono presenti in JDK rt.jar e iniziano con il pacchetto com.sun.xml.ws.internal. Weblogic sta selezionando queste classi da glassfish.jaxb_1.0.0.0_2-1-12.jar & glassfish.jaxws.rt_1.2.0.0_2-1-5.jar, ma questi barattoli non fanno parte della mia applicazione.

  1. Ho già usato weblogic.xml con sotto etichetta,

    <prefer-web-inf-classes>true</prefer-web-inf-classes> 
    
  2. Ho provato ad aggiungere jaxws-api.jar & JWS-api.jar in DefaultDomain directory/lib, ma che didn' t lavoro

Qualsiasi idea di come risolvere questa eccezione o come forzare weblogic di utilizzare classi di runtime JDK? La stessa applicazione funziona correttamente su weblogic stand alone.

+0

Hai mai trovato una risposta a questo? – Nick

risposta

1

Ho avuto lo stesso problema e trovato la risposta qui: http://www.intropro.com/resources/blog/66-argument-s-type-can-t-be-null

In breve - appare il problema perché si è JAXB-impl in voi classpath che sostituisce WebLogics propria JAXB, non può in modo esplicito fai riferimento a questa dipendenza dal tuo pom.xml, ma alcune delle altre dipendenze lo fanno. Nel mio caso ho avuto apache-cxf come dipendenza da maven e aveva jaxb 2.1.13 come sotto-dipendenza con scope "compile". Tutto quello che dovevo fare è escludere questo apache jaxb e aggiungere la mia dipendenza con scope "fornito" per usare esplicitamente WebLogics jaxb.

in pom.xml Si presentava così:

<dependency> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-rt-frontend-jaxws</artifactId> 
    <version>2.7.2</version> 
    <exclusions> 
     <exclusion> 
      <artifactId>jaxb-impl</artifactId> 
      <groupId>com.sun.xml.bind</groupId> 
     </exclusion> 
    </exclusions> 
</dependency> 

<dependency> 
    <groupId>com.sun.xml.bind</groupId> 
    <artifactId>jaxb-impl</artifactId> 
    <scope>provided</scope> 
    <version>2.1.13</version> 
</dependency> 

È possibile utilizzare le eclissi "Gerarchia delle dipendenze" scheda nella vista pom.xml o semplicemente Command Line "mvn dipendenza: albero" per scoprire come jaxb- impl ha fatto il tuo percorso di classe.

0

Nel mio caso, ho avuto un refuso negli argomenti dell'operazione, in cui due argomenti avevano lo stesso nome webParam. Modificato e distribuito, il problema è stato risolto.

Problemi correlati