JAX-WS Commons를 사용하여 Spring에서 작업하도록 JAX-WS를 어떻게 구성합니까?

StackOverflow https://stackoverflow.com/questions/1463295

문제

web.xml에는 다음이 있습니다.

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

내 응용 프로그램 컨텍스트에는 다음과 같은 정의가 있습니다.

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

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

나는 얻었다 NullPointerException 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) 

이상한 ... 구성 오류 인 것처럼 보이지만 대담한 것은 NullPointerException!!!!!!!! 로깅이 제공되지 않습니다.

수지에 배치되었습니다.

도움이 되었습니까?

해결책

업데이트: 마침내이 문제에 대한 실제 답변을 알아 내고 여기에 게시했습니다. http://forum.springsource.org/showthread.php?p=286701

요컨대, 수지 3 배는 XSD-Unaware Parser와 함께 배송되며 Apache Xerces 또는 다른 구문 분석기로 교체해야합니다 (위 포럼 게시물 참조).

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

다음 Bean 정의는 Spring Jax-Ws가 작동하게됩니다 ( "멍청한"Xbean / Namespace Magic을 사용하지 않고). 이것에 의해, 나는 소스를 읽고 사용할 올바른 클래스를 알아 내야했다 - 때로는 의도적으로 내가 알고있는 속성 값을 제공함으로써 (예 : 유효하지 않은 클래스와 같은 - 이것은 스택 추적을 볼 수 있었다. 콩 클래스로 다시 연결하십시오).

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

다른 모든 것은 위에 링크 된 자습서에서와 같이 (web.xml에 Jax-Ws Spring Servlet을 추가하고, 웹 서비스 요청이 JAXWS 서플렛으로 라우팅되도록 서블릿 필터를 추가하십시오).

프록시 웹 서비스 인스턴스 (따라서 종속성 주입, AOP 등)를 사용하는 핵심은 proxyTargetClass = "True"를 설정하여 JDK 동적 프록시 대신 CGLIB 프록시를 강제로 설정하는 것입니다 (인터페이스가 필요). Jax-Ws는 어떤 이유로 든 인터페이스를 좋아하지 않는 것 같습니다.

나는 이것이 어떤 도움이되기를 바랍니다!

안부, 레

다른 팁

LES2 : 구현이 가장 복잡해 보입니다. SpringbeanAutoWiringsUpport의 간단한 사용에 문제가있는 것은 다음과 같습니다. 봄 매뉴얼

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top