2

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

NullPointerExceptionWSDL にアクセスしようとすると、次のようになります。

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!!!!!!!!で死にます ロギングは提供されません。

レジンで展開。

4

2 に答える 2

3

更新:私はついにこの問題に対する本当の答えを見つけて、ここに投稿しました:http: //forum.springsource.org/showthread.php? p=286701

つまり、Resin 3xにはXSDに対応しないパーサーが付属しており、Apache Xercesまたはその他のパーサーと交換する必要があります(上記のフォーラム投稿を参照)。

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

次のBean定義は、Spring JAX-WSを機能させます(「愚かな」xbean /名前空間の魔法を使用せずに)。これを実現するには、ソースを読み取って、使用する正しいクラスを把握する必要がありました。例外が発生することがわかっているプロパティ値を意図的に指定することで(無効なクラスなど)、スタックトレースを確認できるようになりました。 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>

その他はすべて、上記にリンクされているチュートリアルと同じです(web.xmlにJAX-WS Springサーブレットを追加し、サーブレットフィルターを追加して、Webサービス要求がjaxwsサーブレットにルーティングされるようにします)。

プロキシされたWebサービスインスタンスを使用するための鍵(したがって、依存性注入、AOPなどを有効にする)は、proxyTargetClass = "true"を設定して、JDK動的プロキシ(インターフェイスが必要)ではなくCGLIBプロキシを強制することでした。JAX-WSは何らかの理由でインターフェースが好きではないようです。

これが誰かに役立つことを願っています!

よろしく、LES

于 2009-09-29T19:26:58.060 に答える
0

LES2:実装は最​​も複雑に見えます。Springマニュアルで説明されているように、SpringBeanAutowiringSupportの単純な使用法の何が問題になっていますか

于 2009-12-07T15:53:02.450 に答える