Domanda

In web.xml ho il seguente:

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

Nel mio contesto di applicazione ho le seguenti definizioni:

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

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

ho un NullPointerException quando si cerca di accedere al 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) 

Strano ... sembra essere un errore di configurazione, ma l'aggeggio appena muore con un !!!!!!!! NullPointerException non viene fornita alcuna registrazione.

Implementato in resina.

È stato utile?

Soluzione

  

UPDATE: Ho finalmente capito la vera risposta a questo problema ed ha inviato   qui:    http://forum.springsource.org/showthread.php?p=286701

     

In breve, le navi resina 3x con un   XSD-ignaro parser e si deve   sostituirlo con Apache Xerces o qualche   altro parser (vedi sopra post sul forum).

     

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

Le seguenti definizioni di fagioli ottengono primavera JAX-WS di lavoro (senza usare la magia xbean / namespace "stupido"). Per venire da questo, ho dovuto leggere la fonte e capire le classi corrette da utilizzare - a volte fornendo intenzionalmente un valore di proprietà che sapevo avrebbe causato un'eccezione (come ad esempio una classe di valido - Questo mi ha permesso di vedere la traccia dello stack che riconducono alla classe di fagioli).

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

Tutto il resto è come nel tutorial linkato sopra (si aggiunge la Primavera servlet JAX-WS in web.xml, aggiungere il filtro servlet in modo che le richieste di servizi web vengono indirizzati al jaxws servlet).

La chiave per usare l'istanza di servizio web proxy (permettendo così la dipendenza iniezione, AOP, ecc) tramontava proxyTargetClass = "true" per forzare un proxy CGLIB invece di un proxy dinamico JDK (che richiede un'interfaccia). JAX-WS sembra non come interfacce per qualche ragione.

Spero che questo aiuta qualcuno!

Saluti, LES

Altri suggerimenti

les2: L'implementazione sembra più complessa. Cosa c'è di sbagliato con l'utilizzo semplice di SpringBeanAutowiringSupport, come descritto in manuale Primavera

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top