Pregunta

En Web.xml Tengo el siguiente:

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

En mi contexto de aplicación que tienen las siguientes definiciones:

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

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

consigo un NullPointerException al intentar acceder 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) 

Extraño ... parece ser un error de configuración, pero la maldita cosa simplemente muere con un !!!!!!!! NullPointerException No se proporciona ningún registro.

Desplegado en resina.

¿Fue útil?

Solución

  

ACTUALIZACIÓN: que finalmente descubrió la verdadera respuesta a este problema y se publicará   aquí:    http://forum.springsource.org/showthread.php?p=286701

     

En resumen, barcos Resina 3x con una   XSD-conscientes analizador y hay que   reemplazarlo con Apache Xerces o algún   otro programa de análisis (véase más arriba mensaje del foro).

     

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

Las siguientes definiciones de frijoles se la primavera JAX-WS de trabajo (sin utilizar la "estúpida" magia xbean / espacio de nombres). Para conseguir esto, tuve que leer la fuente y averiguar las clases correctas de usar - a veces proporcionando intencionadamente un valor de propiedad que sabía que causaría una excepción (como una clase no válida - esto me permitió ver el seguimiento de la pila, que llevará de nuevo a la clase de 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>

Todo lo demás es igual que en el tutorial vinculado anteriormente (se agrega el servlet primavera JAX-WS en web.xml, añadir el filtro de servlet para que las peticiones de servicios web Cómo encaminan al servlet jaxws).

La clave para usar la instancia de servicio web proxy (lo que permite la inyección de dependencia, AOP, etc.) se ponía proxyTargetClass = "true" a la fuerza de un proxy CGLIB en lugar de un proxy dinámico JDK (que requiere una interfaz). JAX-WS parece no como interfaces para alguna razón.

Espero que esto ayude a alguien!

Saludos, LES

Otros consejos

les2: Su aplicación parece más compleja. ¿Qué hay de malo en uso simple de SpringBeanAutowiringSupport, como se describe en manual de primavera

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top