`
magicbear
  • 浏览: 28700 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

XFire中实现WS-Security时出现的异常及原因

阅读更多
XFire中实现WS-Security时出现的异常及原因:

1.缺包,在客户端添加xalan.jar


Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xml/utils/URI$MalformedURIException

    at org.apache.ws.security.message.WSSecSignature.prepare(WSSecSignature.java:350)

    at org.apache.ws.security.message.WSSecSignature.build(WSSecSignature.java:703)

    at org.apache.ws.security.action.SignatureAction.execute(SignatureAction.java:54)

    at org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:192)

    at org.codehaus.xfire.security.wss4j.WSS4JOutHandler.invoke(WSS4JOutHandler.java:158)

    at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)

    at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:79)

    at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:114)

    at org.codehaus.xfire.client.Client.invoke(Client.java:336)

    at org.codehaus.xfire.client.XFireProxy.handleRequest(XFireProxy.java:77)

    at org.codehaus.xfire.client.XFireProxy.invoke(XFireProxy.java:57)

    at $Proxy0.test(Unknown Source)

    at keytool.TestClient.main(TestClient.java:69)



2.在调用服务端方法前未添加Handler,没有对报头添加信息
Exception in thread "main" org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: WSS4JInHandler: Request does not contain required Security header

org.codehaus.xfire.fault.XFireFault: WSS4JInHandler: Request does not contain required Security header

    at org.codehaus.xfire.fault.Soap11FaultSerializer.readMessage(Soap11FaultSerializer.java:31)

    at org.codehaus.xfire.fault.SoapFaultSerializer.readMessage(SoapFaultSerializer.java:28)

    at org.codehaus.xfire.soap.handler.ReadHeadersHandler.checkForFault(ReadHeadersHandler.java:111)

    at org.codehaus.xfire.soap.handler.ReadHeadersHandler.invoke(ReadHeadersHandler.java:67)

    at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)

    at org.codehaus.xfire.client.Client.onReceive(Client.java:406)

    at org.codehaus.xfire.transport.http.HttpChannel.sendViaClient(HttpChannel.java:139)

    at org.codehaus.xfire.transport.http.HttpChannel.send(HttpChannel.java:48)

    at org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:26)

    at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)

    at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:79)

    at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:114)

    at org.codehaus.xfire.client.Client.invoke(Client.java:336)

    at org.codehaus.xfire.client.XFireProxy.handleRequest(XFireProxy.java:77)

    at org.codehaus.xfire.client.XFireProxy.invoke(XFireProxy.java:57)

    at $Proxy0.getList(Unknown Source)

    at keytool.TestClient.main(TestClient.java:46)



如果是基于用户名密码的可能报的是这样的错:
Exception in thread "main" org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: 请求必须包含验证信息
org.codehaus.xfire.fault.XFireFault: 请求必须包含验证信息
    at org.codehaus.xfire.fault.Soap11FaultSerializer.readMessage(Soap11FaultSerializer.java:31)
    at org.codehaus.xfire.fault.SoapFaultSerializer.readMessage(SoapFaultSerializer.java:28)
    at org.codehaus.xfire.soap.handler.ReadHeadersHandler.checkForFault(ReadHeadersHandler.java:111)
    at org.codehaus.xfire.soap.handler.ReadHeadersHandler.invoke(ReadHeadersHandler.java:67)
    at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
    at org.codehaus.xfire.client.Client.onReceive(Client.java:406)
    at org.codehaus.xfire.transport.http.HttpChannel.sendViaClient(HttpChannel.java:139)
    at org.codehaus.xfire.transport.http.HttpChannel.send(HttpChannel.java:48)
    at org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:26)
    at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
    at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:79)
    at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:114)
    at org.codehaus.xfire.client.Client.invoke(Client.java:336)
    at org.codehaus.xfire.client.XFireProxy.handleRequest(XFireProxy.java:77)
    at org.codehaus.xfire.client.XFireProxy.invoke(XFireProxy.java:57)
    at $Proxy0.getUser(Unknown Source)
    at test.ClientTest.main(ClientTest.java:35)

就是代表验证不合法,拒绝提供服务。



3. 安装对应JDK 版本的Unlimited Strength Jurisdiction策略文件. 策略文件包括local_policy.jar和US_export_policy.jar文件,将其拷贝到<JAVA_HOME>/jre/lib/security目录下。



你可以从http: //java.sun.com/j2se/1.5.0/download.jsp 或 http://java.sun.com/j2se/1.4.2/download.html页面的底部找到下载的链接。否则在使用WS- Security时,可以会抛出java.security.InvalidKeyException: Illegal key size的错误信息。



4. 安装SecurityProvider

WSS4J使用了BouncyCastle的SecurityProvider,所以需要事先在java.security文件中进行配置,否则运 行加密模式的XFire认证时,会抛出以下的出错信息:org.apache.ws.security.WSSecurityException: An unsupported signature or encryption algorithm was used unsupported key

在java.security文件中(位于<JAVA_HOME>/jre/lib/security目录中)添加BouncyCastleProvider的配置:



security.provider.1=sun.security.provider.Sun

security.provider.2=sun.security.rsa.SunRsaSign

security.provider.3=com.sun.net.ssl.internal.ssl.Provider

security.provider.4=com.sun.crypto.provider.SunJCE

security.provider.5=sun.security.jgss.SunProvider

security.provider.6=com.sun.security.sasl.Provider

security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider





5.配置文件里缺少<inHandlers>.... </inHandlers>这段配置或者这段配置有问题。


Exception in thread "main" org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: Header {Security}http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd was not undertsood by the service.

org.codehaus.xfire.fault.XFireFault: Header {Security}http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd was not undertsood by the service.

    at org.codehaus.xfire.fault.Soap11FaultSerializer.readMessage(Soap11FaultSerializer.java:31)

    at org.codehaus.xfire.fault.SoapFaultSerializer.readMessage(SoapFaultSerializer.java:28)

    at org.codehaus.xfire.soap.handler.ReadHeadersHandler.checkForFault(ReadHeadersHandler.java:111)

    at org.codehaus.xfire.soap.handler.ReadHeadersHandler.invoke(ReadHeadersHandler.java:67)

    at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)

    at org.codehaus.xfire.client.Client.onReceive(Client.java:406)

    at org.codehaus.xfire.transport.http.HttpChannel.sendViaClient(HttpChannel.java:139)

    at org.codehaus.xfire.transport.http.HttpChannel.send(HttpChannel.java:48)

    at org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:26)

    at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)

    at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:79)

    at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:114)

    at org.codehaus.xfire.client.Client.invoke(Client.java:336)

    at org.codehaus.xfire.client.XFireProxy.handleRequest(XFireProxy.java:77)

    at org.codehaus.xfire.client.XFireProxy.invoke(XFireProxy.java:57)

    at $Proxy0.test(Unknown Source)

    at keytool.TestClient.main(TestClient.java:69)

 

 

Fault occurred!

org.codehaus.xfire.fault.XFireFault: Header {Security}http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd was not undertsood by the service.

    at org.codehaus.xfire.soap.handler.ValidateHeadersHandler.assertUnderstandsHeader(ValidateHeadersHandler.java:76)

    at org.codehaus.xfire.soap.handler.ValidateHeadersHandler.invoke(ValidateHeadersHandler.java:53)

    at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)

    at org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:64)

    at org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.java:38)

    at org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:304)

    at org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:129)

    at org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:116)

    at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)

    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)

    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)

    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)

    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)

    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)

    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)

    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)

    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)

    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)

    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)

    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)

    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)

    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)

    at java.lang.Thread.run(Thread.java:595)

 

6.配置文件。。.properties的org.apache.ws.security.crypto.merlin.file有错

 

Exception in thread "main" org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: org.apache.ws.security.components.crypto.Merlin cannot create instance

org.codehaus.xfire.fault.XFireFault: org.apache.ws.security.components.crypto.Merlin cannot create instance

    at org.codehaus.xfire.fault.Soap11FaultSerializer.readMessage(Soap11FaultSerializer.java:31)

    at org.codehaus.xfire.fault.SoapFaultSerializer.readMessage(SoapFaultSerializer.java:28)

    at org.codehaus.xfire.soap.handler.ReadHeadersHandler.checkForFault(ReadHeadersHandler.java:111)

    at org.codehaus.xfire.soap.handler.ReadHeadersHandler.invoke(ReadHeadersHandler.java:67)

    at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)

    at org.codehaus.xfire.client.Client.onReceive(Client.java:406)

    at org.codehaus.xfire.transport.http.HttpChannel.sendViaClient(HttpChannel.java:139)







7. Unexpected close tag </body>; expected </HR>.服务端缺少xalan.jar。

15:27:36,062 ERROR [STDERR] org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: Unexpected close tag </body>; expected </HR>.
at [row,col {unknown-source}]: [1,1013]
15:27:36,062 ERROR [STDERR] org.codehaus.xfire.fault.XFireFault: Unexpected close tag </body>; expected </HR>.
at [row,col {unknown-source}]: [1,1013]
15:27:36,062 ERROR [STDERR]  at org.codehaus.xfire.fault.XFireFault.createFault(XFireFault.java:89)
15:27:36,062 ERROR [STDERR]  at org.codehaus.xfire.client.Client.onReceive(Client.java:386)



8. java.lang.NoClassDefFoundError: org/apache/xml/serializer/TreeWalker错误
原因:原本这个类是包含在xalan.jar中的,但是xalan-j2.7.0版的发布包中,将serializer包中的类单独打包成serializer.jar,不再包含在xalan.jar中,所以才会即使添加了xalan.jar也无法找到该类,添加后即可解决问题。添加到服务端。



错误内容如下:Unrecognized xbean element mapping: services in namespace  http://xfire.codeh.
经过分析得出XFire1.26需要xalan.jar包的支持.因此要添加xalan.jar



错误一:

15:27:36,062 ERROR [STDERR] org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: Unexpected close tag </body>; expected </HR>.
at [row,col {unknown-source}]: [1,1013]
15:27:36,062 ERROR [STDERR] org.codehaus.xfire.fault.XFireFault: Unexpected close tag </body>; expected </HR>.
at [row,col {unknown-source}]: [1,1013]
15:27:36,062 ERROR [STDERR]  at org.codehaus.xfire.fault.XFireFault.createFault(XFireFault.java:89)
15:27:36,062 ERROR [STDERR]  at org.codehaus.xfire.client.Client.onReceive(Client.java:386)

解决方法:调用的地址写错了。这个原因好像不对,在我的项目中遇到这个问题,竟然是因为服务端缺少xalan.jar。





错误二:

Caused by: java.lang.IllegalAccessException: Class org.codehaus.xfire.service.invoker.LocalFactory can not access a member of class

解决方法:接口实现类不是public 的,所以不能实例化。





错误三:java.io.CharConversionException: Invalide char #a323

解决方法:试试添加 xfire 1.1 miscellaneous 库
分享到:
评论
1 楼 wangdgsc 2010-02-08  
你好,我能不能向你请教一个问题,我刚用xfire,但是却出了servlet not invoke error code=404 的错误,搞得我很是奇怪,不知道是什么原因,我在google里面也有找,不过基本上都没有答案,

相关推荐

    XFire中实现WS-Security经典

    标题"XFire中实现WS-Security经典"表明了本文将深入探讨如何在XFire框架中实现Web服务安全标准——WS-Security。WS-Security(Web Services Security)是 Oasis 标准组织定义的一套用于保护Web服务交互的安全规范,...

    xfire1.2.6 ws-security示例

    在这个示例中,我们将探讨如何在xfire1.2.6中实现和应用WS-Security。 WS-Security标准由OASIS(Organization for the Advancement of Structured Information Standards)制定,旨在提供一种在SOAP消息层进行安全...

    基于XFire实施WS-Security

    综上所述,基于XFire实施WS-Security是实现Web Service安全的重要途径,它利用WS-Security标准在应用层提供了一套完整的安全策略。通过WSS4J和XFire的Handler机制,开发人员可以方便地对SOAP报文进行加密、签名和...

    xfire+spring实现ws-security(数字签名和报文加密)

    eclipse下spring+xfire实现ws-security的简单例子,包含服务器和客户端的代码,实现用户名/密码.数字签名和报文加密的安全认证,唯一不足的是没有实现数字签名和报文加密的混合模式(可能是密匙文件的问题,正在努力中),...

    ws-security java-mail

    在Xfire中实现`ws-security`,意味着开发者正在为基于Xfire的Web服务添加安全层。Xfire是一款已不再维护的开源Java库,用于构建Web服务客户端和服务端。尽管Xfire已被Apache CXF等更现代的框架取代,但其对`ws-...

    Webservice实现WS-Security(XFire)

    NULL 博文链接:https://zhaoshijie.iteye.com/blog/839050

    WS-Security 安全

    WS-Security的核心是建立在SOAP消息之上,通过在SOAP头中添加安全元素来实现安全功能。其中,UsernameTokenProfile、X.509TokenProfile和SAMLTokenProfile分别提供了基于用户名密码、数字证书和SAML断言的安全令牌...

    xfire spring security

    《xfire与Spring Security整合实现WS-Security安全认证详解》 在现代企业级应用开发中,安全性是不可或缺的重要环节。Spring Security作为Java领域的安全框架,提供了全面的身份验证和授权服务。而Xfire(现已被...

    xfire-distribution-1.2.3

    4. **广泛的协议支持**: XFire 支持 SOAP 1.1 和 1.2,WS-Security,WS-Addressing 等多种 Web 服务标准,以及 JAXB 和 JiBX 等数据绑定技术。 5. **Aegis Databinding**: XFire 自带的 Aegis 数据绑定引擎,能够...

    Xfire整合webservice jar包

    支持多种Web服务业界重要标准如SOAP、WSDL、Web服务寻址(WS-Addressing)、Web服务安全(WS-Security)等; 支持JSR181,可以通过JDK5配置Web服务; 高性能的SOAP实现; 服务器端、客户端代码辅助生成; 对Spring、...

    使用xfire框架搭建webService的一个demo

    4. **处理程序(Handler)**:自定义处理程序类,用于处理SOAP Header中的身份验证信息,或实现WS-Security的相关逻辑。 5. **客户端代码(Client Code)**:生成的客户端Stubs,用于调用Web服务。xfire提供了工具...

    xfire-all-1.2.4.jar包webService

    **Apache CXF**:XFire后来被并入Apache CXF项目,CXF在XFire的基础上增加了更多功能,如支持RESTful Web服务、WS-Security、WS-Policy等,同时提供了更丰富的工具集和更好的社区支持。 **使用场景**: - 开发者...

    WebService之XFire和Jax实现身份验证

    XFire和JAX(Java API for XML)都是在Java环境中实现WebService的重要工具,它们分别提供了不同的方法来处理身份验证,确保数据安全传输。 XFire是早期的一个开源项目,它是一个快速、灵活的Web服务框架,支持SOAP...

    xfire-1.2.6 jar包

    - **处理异常**:XFire提供了对Web服务异常的处理机制,帮助开发者管理可能出现的错误情况。 - **性能优化**:可以通过调整配置参数,如缓存大小、线程池设置等,来优化服务的性能。 总的来说,xfire-1.2.6 jar包是...

    xfire-distribution-1.2.6.rar

    10. **安全性**:虽然XFire 1.2.6不包含Xalan,但它支持WS-Security标准,可以实现基于SOAP消息的安全认证和加密。 在"lib"目录下,通常会包含XFire运行所需的JAR文件,如XFire的核心库、依赖的XML解析器、JAXB实现...

    xfire访问webservice客户端用到的jar包

    XFire支持WS-Security,可以实现消息级的安全性,如数字签名和加密。这使得敏感数据在传输过程中得到保护,防止被窃取或篡改。 6. **与其他技术的集成** XFire与Spring框架的紧密集成使得它易于在企业级应用中...

    xfire验证签名加密详细

    本文将详细介绍如何在Spring框架中集成XFire并实现基于WS-Security的安全策略,包括验证、签名和加密。首先,我们需要创建一个Web工程`xfireDemo`,并添加必要的依赖库。这些库包括Spring的核心模块,AOP支持,日志...

    xfire webServeic 例子 项目中实用

    - 了解如何在XFire中实现WS-ReliableMessaging和WS-Transaction等高级Web服务特性。 总之,这个"xfire webServeic 例子 项目中实用"的资源为学习和实践XFire提供了一个很好的起点,可以帮助开发者深入理解Web服务...

Global site tag (gtag.js) - Google Analytics