Question

Dans web.xml je suit:

<servlet>
        <description>JAX-WS endpoint - EARM</description>
        <display-name>jaxws-servlet</display-name>
        <servlet-name>jaxws-servlet</servlet-name>
        <servlet-class>com.sun.xml.ws.transport.http.servlet.WSSpringServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>jaxws-servlet</servlet-name>
        <url-pattern>/webServices/*</url-pattern>
    </servlet-mapping>

Dans mon contexte d'application, j'ai les définitions suivantes:

<bean id="helloService" class="com.foo.HelloServiceImpl">        
    <property name="regularService" ref="regularService" />
</bean>

<wss:binding url="/webServices/helloService" service="#helloService" />

Je reçois un NullPointerException lorsque vous essayez d'accéder au WSDL:

java.lang.NullPointerException
at com.sun.xml.ws.transport.http.HttpAdapter.<init>(HttpAdapter.java:145)
at com.sun.xml.ws.transport.http.servlet.ServletAdapter.<init>(ServletAdapter.java:76)
at com.sun.xml.ws.transport.http.servlet.ServletAdapterList.createHttpAdapter(ServletAdapterList.java:5 0)
at com.sun.xml.ws.transport.http.servlet.ServletAdapterList.createHttpAdapter(ServletAdapterList.java:4 7)
at com.sun.xml.ws.transport.http.HttpAdapterList.createAdapter(HttpAdapterList.java:73)
at com.sun.xml.ws.transport.http.servlet.SpringBinding.create(SpringBinding.java:24)
at com.sun.xml.ws.transport.http.servlet.WSSpringServlet.init(WSSpringServlet.java:46) 

Etrange ... semble être une erreur de configuration, mais la chose darn meurt juste avec un !!!!!!!! de NullPointerException Pas d'enregistrement est fourni.

Déployé en résine.

Était-ce utile?

La solution

  

Mise à jour: J'ai finalement compris la vraie réponse à ce problème et affiché   c'est ici:    http://forum.springsource.org/showthread.php?p=286701

     

En bref, les navires de résine 3x avec une   analyseur XSD-pas au courant et vous devez   le remplacer par Apache Xerces ou certains   autre analyseur (voir ci-dessus post sur le forum).

     

=========================

Les définitions suivantes de haricots obtenir le travail JAX-WS Spring (sans utiliser le « stupide » xbean / magie d'espace de noms). Pour trouver cela, je devais lire la source et déterminer les classes correctes à utiliser - parfois en fournissant intentionnellement une valeur de propriété que je savais causerait une exception (comme une classe non valide - ce qui m'a permis de voir la trace de la pile qui ramener à la classe du bean).

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<bean id="webServiceMethodInterceptor"
    class="com.webservice.util.interceptors.WebServiceMethodInterceptor">
    <property name="userId" value="hello" />
    <property name="password" value="world" />
    <property name="roles" value="ROLE_ANONYMOUS,ROLE_MICKEY_MOUSE" />
</bean>

<bean id="webServiceLoggingInterceptor"
    class="com.webservice.util.interceptors.LoggingInterceptor">
    <property name="level" value="debug" />
</bean>

<bean id="webServiceExceptionTranslator"
    class="com.webservice.util.interceptors.WebServiceExceptionTranslator"/>

<!-- The list of interceptors to apply to all web methods -->
<bean id="webServiceInterceptors" class="java.util.LinkedList">
    <constructor-arg index="0">
        <list>
            <value>webServiceExceptionTranslator</value>
            <value>webServiceLoggingInterceptor</value>
            <value>webServiceMethodInterceptor</value>
        </list>
    </constructor-arg>
</bean>

<!-- Proxied ExampleWebService -->
<bean id="exampleWebService" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="target">
        <bean class="com.webservice.ExampleWebServiceImpl">
            <!-- TODO: add dependencies for web service here, for example:
            <property name="someService" ref="someService" />
            -->
        </bean>
    </property>
    <property name="interceptorNames" ref="webServiceInterceptors" />
    <property name="proxyTargetClass" value="true" />
</bean>

<!-- JAX-WS Endpoint for ExampleWebService -->
<bean class="com.sun.xml.ws.transport.http.servlet.SpringBinding">
    <property name="url" value="/webServices/exampleService" />
    <property name="service">
        <bean class="org.jvnet.jax_ws_commons.spring.SpringService">
            <property name="bean">
                <ref local="exampleWebService" />
            </property>
            <property name="impl"
                value="com.webservice.ExampleWebServiceImpl" />
        </bean>
    </property>
</bean>

Tout le reste est comme dans le tutoriel lien ci-dessus (vous ajoutez le servlet Spring JAX-WS dans web.xml, ajoutez le filtre de servlet afin que les demandes de service Web sont routés vers le servlet JAXWS).

La clé pour utiliser l'instance de service Web approximé (permettant ainsi d'injection de dépendance, AOP, etc.) se couchait proxyTargetClass = "true" pour forcer une procuration CGLIB au lieu d'un proxy dynamique JDK (qui nécessite une interface). JAX-WS semble pas comme des interfaces pour une raison quelconque.

J'espère que cela aide quelqu'un!

Cordialement, LES

Autres conseils

les2: Votre mise en œuvre semble plus complexe. Quel est le problème avec l'utilisation simple SpringBeanAutowiringSupport, comme décrit dans manuel de printemps

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top