异常信息
信息: Interceptor has thrown exception, unwinding now
org.apache.cxf.binding.soap.SoapFault: Problem writing SAAJ model to stream
at org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor.handleMessage(SAAJOutInterceptor.java:127)
at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor.handleMessage(WSS4JOutInterceptor.java:94)
at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor.handleMessage(WSS4JOutInterceptor.java:47)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:471)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:301)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:253)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:121)
at $Proxy49.showHello(Unknown Source)
at Test.main(Test.java:13)
Caused by: javax.xml.soap.SOAPException: Failed to create MessageFactory: org.apache.axis.soap.MessageFactoryImpl
at javax.xml.soap.MessageFactory.newInstance(MessageFactory.java:55)
at org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor.getFactory(SAAJOutInterceptor.java:80)
at org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor.handleMessage(SAAJOutInterceptor.java:113)
... 10 more
Caused by: java.lang.ClassNotFoundException: org.apache.axis.soap.MessageFactoryImpl
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at javax.xml.soap.MessageFactory.newInstance(MessageFactory.java:50)
... 12 more
Exception in thread "main" javax.xml.ws.WebServiceException: org.apache.cxf.binding.soap.SoapFault: Problem writing SAAJ model to stream
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:139)
at $Proxy49.showHello(Unknown Source)
at Test.main(Test.java:13)
Caused by: org.apache.cxf.binding.soap.SoapFault: Problem writing SAAJ model to stream
at org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor.handleMessage(SAAJOutInterceptor.java:127)
at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor.handleMessage(WSS4JOutInterceptor.java:94)
at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor.handleMessage(WSS4JOutInterceptor.java:47)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:471)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:301)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:253)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:121)
... 2 more
Caused by: javax.xml.soap.SOAPException: Failed to create MessageFactory: org.apache.axis.soap.MessageFactoryImpl
at javax.xml.soap.MessageFactory.newInstance(MessageFactory.java:55)
at org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor.getFactory(SAAJOutInterceptor.java:80)
at org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor.handleMessage(SAAJOutInterceptor.java:113)
... 10 more
Caused by: java.lang.ClassNotFoundException: org.apache.axis.soap.MessageFactoryImpl
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at javax.xml.soap.MessageFactory.newInstance(MessageFactory.java:50)
... 12 more
服务端配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- START SNIPPET: beans -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<!-- WebService中的安全,采用WSS4J来实现 -->
<bean id="wss4jInInterceptor"
class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
<constructor-arg>
<map>
<!-- 表示验证机制是用户姓名令牌,也就是使用传统的用户名和密码机制 -->
<entry key="action" value="UsernameToken"></entry>
<!-- 表示密码类型是文本,还可以是WSConstants.PASSWORD_DIGEST(密码会被加密为MD5) -->
<entry key="passwordType" value="PasswordText"></entry>
<!-- 表示服务器端验证密码的回调处理类,这个类必须实现CallbackHandler接口 -->
<entry key="passwordCallbackClass"
value="com.guzhi.wss4j.test.ServerPasswordCallbackHandle">
</entry>
</map>
</constructor-arg>
</bean>
<!-- 实现方式 访问地址http://localhost:8080/webService_cxf_wss4j/helloWorld?wsdl-->
<jaxws:endpoint id="helloWorldWs"
implementor="com.guzhi.HelloServiceImpl" address="/helloWorld">
<!-- 添加安全安全拦截器 -->
<jaxws:inInterceptors>
<ref bean="wss4jInInterceptor" />
</jaxws:inInterceptors>
<jaxws:inFaultInterceptors>
<!-- 错误日志 -->
<bean
class="org.apache.cxf.interceptor.LoggingInInterceptor">
</bean>
</jaxws:inFaultInterceptors>
<jaxws:outFaultInterceptors>
<bean
class="org.apache.cxf.interceptor.LoggingOutInterceptor">
</bean>
</jaxws:outFaultInterceptors>
</jaxws:endpoint>
</beans>
客户端配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- START SNIPPET: beans -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<!-- WebService中的安全,采用WSS4J来实现 -->
<bean id="wss4jOutInterceptor"
class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
<constructor-arg>
<map>
<!-- 表示验证机制是用户姓名令牌,也就是使用传统的用户名和密码机制 -->
<entry key="action" value="UsernameToken"></entry>
<!-- 用于初始化用户名,这是一个必选项 -->
<entry key="user" value="Fetion"></entry>
<!-- 表示密码类型是文本,还可以是WSConstants.PASSWORD_DIGEST(密码会被加密为MD5) -->
<entry key="passwordType" value="PasswordText"></entry>
<!-- 表示服务器端验证密码的回调处理类,这个类必须实现CallbackHandler接口 -->
<entry key="passwordCallbackClass"
value="com.guzhi.client.ClientPasswordCallbackHandle">
</entry>
</map>
</constructor-arg>
</bean>
<jaxws:client id="helloServiceClient"
address="http://localhost:8080/webService_cxf_wss4j/helloWorld" serviceClass="com.guzhi.IHelloService">
<jaxws:outInterceptors>
<ref bean="wss4jOutInterceptor"/>
</jaxws:outInterceptors>
</jaxws:client>
</beans>
同样的问题 http://www.iteye.com/topic/173742
问题补充:lovewhzlq 写道
java.lang.ClassNotFoundException: org.apache.axis.soap.MessageFactoryImpl
少了jar包,
我吧Axis包倒进来啦,刚才那个错不报啦,可是现在有报成这个错误啦
org.w3c.dom.DOMException: No such Localname for SOAP URI
at org.apache.axis.message.SOAPDocumentImpl.createElementNS(SOAPDocumentImpl.java:379)
at org.apache.axis.SOAPPart.createElementNS(SOAPPart.java:1109)
at org.apache.cxf.staxutils.W3CDOMStreamWriter.writeStartElement(W3CDOMStreamWriter.java:132)
at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.writeSoapEnvelopeStart(SoapOutInterceptor.java:118)
at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleMessage(SoapOutInterceptor.java:80)
at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleMessage(SoapOutInterceptor.java:61)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:471)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:301)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:253)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:121)
at $Proxy49.showHello(Unknown Source)
at Test.main(Test.java:13)
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: No such Localname for SOAP URI
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:141)
at $Proxy49.showHello(Unknown Source)
at Test.main(Test.java:13)
Caused by: org.w3c.dom.DOMException: No such Localname for SOAP URI
at org.apache.axis.message.SOAPDocumentImpl.createElementNS(SOAPDocumentImpl.java:379)
at org.apache.axis.SOAPPart.createElementNS(SOAPPart.java:1109)
at org.apache.cxf.staxutils.W3CDOMStreamWriter.writeStartElement(W3CDOMStreamWriter.java:132)
at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.writeSoapEnvelopeStart(SoapOutInterceptor.java:118)
at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleMessage(SoapOutInterceptor.java:80)
at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleMessage(SoapOutInterceptor.java:61)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:471)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:301)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:253)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:121)
... 2 more
问题补充:lovewhzlq 写道
java.lang.ClassNotFoundException: org.apache.axis.soap.MessageFactoryImpl
少了jar包,
老兄你差点把我误导,刚才那问题不是导入axis的问题,现在的问题已经解决啦。
javax.xml.soap.MessageFactory.newInstance在执行的时候他默认找的的是axis里的MessageFactoryImpl,这样是不对的,他应该找com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl中实现。
最终答案:
客户端在执行之前向设置:
System.setProperty("javax.xml.soap.MessageFactory",
"com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl");
或者是在虚拟机执行之前先设置:
-Djavax.xml.soap.MessageFactory=com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl
我的例子
public class Test {
public static void main(String[] args) {
System.setProperty("javax.xml.soap.MessageFactory",
"com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl");
ClassPathXmlApplicationContext classPath
= new ClassPathXmlApplicationContext(new String[] {"client-beans.xml"});
/**
* 实现方式
*/
IHelloService client=(IHelloService)classPath.getBean("helloServiceClient");
client.showHello("赵艳芳==哈哈");
}
但是必须向把axis中包先删掉
问题补充:lovewhzlq 写道
java.lang.ClassNotFoundException: org.apache.axis.soap.MessageFactoryImpl
少了jar包,
第二种实现方式是一个图片
相关推荐
android client ksoap2 token apache cxf wss4j authentication
Spring集成CXF实例(包含WSS4J安全认证)
CXF WS-Security WSS4J 例子 可以运行,运行的时候只要运行client就行,重点是运行完之后要关掉第一个控制台,才能看到结果。一定要记得改一下client的路径名
webservice+cxf+wss4j+spring 整合的demo 其中bean 中有和其他bean对应关系的是建了个中间类进行传输,因为问题的解决办法是后来想到的没有写到里面,有问题可以联系我
cxf wss4j demo intellij idea9.0 打开
CXF使用WSS4J实现WS-Security规范,本例的配置是Timestamp Signature Encrypt,具体使用可以参考我的博客http://blog.csdn.net/wangchsh2008/article/details/6708270
SSM+cxf+log4j整合框架;springmvc+spring+mybatis整合开发,内部集成webservice技术,采用cxf框架进行实现,log4j进行日志记录
CXF框架简单介绍、CXF框架工具使用、CXF框架工具报错解决
cxf使用中编码问题,有关于gbk等的编码问题在cxf中的解决方法
这个是今天学习的的cxf开发webservice,里面同时含有的dom4j解析xml代码给大家看看~里面jar包都有 直接导入项目就是 cxf我觉得比其他的webservice开发好用多了 不愧称与spring的无缝衔接
3.抛弃cxf默认的log方式,使用log4j的方式,方便以后整合到其他app中而不改变之前系统log的方式。 答谢: 关于cxf的深入研究,我发现国人翻译的东西很少,我想尽自己的微薄之力能给大家带些有用的东西,如果有什么...
CXF restful的许多异常java.lang.NoClassDefFoundError: javax/ws/rs/MessageProcessingException.需要javax.ws.rs-api-2.0-m10.jar
WEB service 使用cxf 包实现后的身份验证,使用wssecuriry
CXF webservice 使用实例,CXF创建webservice以及调用示例;WEBSERVICE输入、输出拦截器设置;用户验证;文件上传等。附带所有使用到的JAR包。
应用cxf开发webservice应用所需要的相关jar包,不同的cxf版本对应的wss4j.jar,neethi.jar,woodstox-core-xx.jar,xmlschema-core-xx.jar版本都不相同,匹配错误的话开发过程中会报错。
slf4j-api.jar.zip CXF整合SSH你可能需要它
是一个比较详细的cxf使用项目,里面有矿建搭建,也有cxf的使用,内容比较详细和丰富
CXF使用EndpointImpl发布WebService加入拦截器
这是我在使用cxf+spring进行开发中的一点总结,如何搭建开发环境、如何配置dao使用,如何解决乱码问题等的经验分享
带详细解决方案说明文档,提供三种解决方式,另外包含stax2-api.jar,stax2-api-source.jar,woodstox-core-asl-4.4.1.jar,stax-ex.jar,wstx-asl-3.2.9.jar等jar文件,亲测有效。