加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

weblogic上的webservice

发布时间:2020-12-17 02:35:08 所属栏目:安全 来源:网络整理
导读:????在开发webservice的过程中,如果使用tomcat作为单机发布测试,会发现非常容易。比较典型的开发框架: 1.axis。axis有1.x和2.x版本。如果碰巧你的服务端开发商使用1.x版本,噩梦就开始了。你在社区无法获取1.x的全部支持。 2.cxf。以前的xfire整合了好多
????在开发webservice的过程中,如果使用tomcat作为单机发布测试,会发现非常容易。比较典型的开发框架:
1.axis。axis有1.x和2.x版本。如果碰巧你的服务端开发商使用1.x版本,噩梦就开始了。你在社区无法获取1.x的全部支持。
2.cxf。以前的xfire整合了好多东西,包括jaxp。cxf生成的客户端代码不支持rpc。
3.jaxp。以前版本为1.x时,使用xrpcc生成客户端代码。2.x以后,使用jaxws/bin/wsimport生成代码。不过这个命令不支持rpc,如果还需要支持rpc,则必须使用jaxrpc/bin/wscompile生成代码。
????jaxp生成rpc支持的客户端示例:
  1. 编写config.xml文件。如下。
  2. 使用命令:wscompile -gen:client -keep? config.xml
  1. <configuration?
  2. ????xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">?
  3. ????????<wsdl?
  4. ????location="http://localhost:8080/services/my.wsdl"?
  5. ????packageName="com.mycom.webservice.my"?/>?
  6. </configuration>?
以上任何框架生成的webservice代码,在tomcat里面运行正常。但是如果移植到weblogic,麻烦就来了。
weblogic使用了自己的webservice实现。在运行过程中,由于其webservice实现时考虑了向低版本兼容策略,在服务层又没有进行很好的设计规避新版本和旧版本的问题,其结果直接导致以上框架生成的webservice客户端无法使用。

解决方案是:
  1. 设置系统变量。
    1. System.setProperty("javax.xml.parsers.SAXParserFactory","org.apache.xerces.jaxp.SAXParserFactoryImpl");
  2. 设置系统变量有时候不好使,视乎代码初始化设置的时间和冲突应用(如果有的话。没有冲突应用则以上设置就能起作用)的初始化设置时间。
  3. 部署为ear。ear可以设置系统变量,该变量在本系统运行周期起作用。以下是一个META-INF/weblogic-application.xml的例子。
    1. <?xml?version="1.0"?encoding="UTF-8"?>
    2. <weblogic-application?xmlns="http://www.bea.com/ns/weblogic/90">
    3. ????<xml>
    4. ??????<parser-factory>
    5. ????????<saxparser-factory>
    6. ??????????org.apache.xerces.jaxp.SAXParserFactoryImpl
    7. ????????</saxparser-factory>
    8. ????????<document-builder-factory>
    9. ??????????org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
    10. ????????</document-builder-factory>
    11. ????????<transformer-factory>
    12. ??????????org.apache.xalan.processor.TransformerFactoryImpl
    13. ????????</transformer-factory>
    14. ??????</parser-factory>
    15. ????</xml>
    16. ????<application-param>
    17. ????????<param-name>webapp.encoding.default</param-name>
    18. ????????<param-value>UTF-8</param-value>
    19. ????</application-param>
    20. ????<prefer-application-packages>
    21. ????????<package-name>javax.jws.*</package-name>
    22. ????????<package-name>org.apache.xerces.*</package-name>
    23. ????????<package-name>org.apache.xalan.*</package-name>
    24. ????</prefer-application-packages>
    25. </weblogic-application>?
  4. 如果使用jaxp的rpc方式生成webservice客户端,有可能会报下面的错误。这时可能需要检查是否使用了jdk6来生成客户端。如果是,请下载最新的saaj或者换jdk5.
    1. java.lang.ClassCastException:?com.sun.xml.internal.messaging.saaj.soap.ver1_1.Message1_1Impl?cannot?be?cast?to?com.sun.xml.messaging.saaj.soap.MessageImpl
  5. 如果使用jaxp的rpc方式生成webservice客户端,有可能会报下面的错误。
    1. java.lang.ClassCastException:?weblogic.webservice.core.soap.SOAPMessageImpl
    这时,可能需要在代码中设置系统变量。
    1. System.setProperty("javax.xml.soap.MessageFactory","com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl");
    2. System.setProperty("javax.xml.soap.SOAPConnectionFactory","weblogic.wsee.saaj.SOAPConnectionFactoryImpl");
    或者使用ear并在weblogic-application.xml来设置系统变量。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读