gpt4 book ai didi

java - 如何使用 jax-ws commons 配置 jax-ws 以与 Spring 一起使用?

转载 作者:行者123 更新时间:2023-12-04 07:03:30 33 4
gpt4 key购买 nike

在 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 !!!!!!!!!不提供日志记录。

部署在树脂中。

最佳答案

UPDATE: I finally figured out the real answer to this problem and posted it here: http://forum.springsource.org/showthread.php?p=286701

In short, Resin 3x ships with an XSD-unaware parser and you have to replace it with Apache Xerces or some other parser (see above forum post).

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



以下 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 servlet,添加 servlet 过滤器以便将 Web 服务请求路由到 jaxws servlet)。

使用代理 Web 服务实例(从而启用依赖注入(inject)、AOP 等)的关键是设置 proxyTargetClass="true"以强制使用 CGLIB 代理而不是 JDK 动态代理(需要接口(interface))。由于某种原因,JAX-WS 似乎不喜欢接口(interface)。

我希望这可以帮助别人!

问候,
LES

关于java - 如何使用 jax-ws commons 配置 jax-ws 以与 Spring 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1463295/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com