运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

使用ant在Weblogic 9.2上使用JAX-WS客户端

运维开发网 https://www.qedev.com 2020-05-09 12:43 出处:网络 作者:运维开发网整理
我最近在尝试在Weblogic 9.2上部署JAX-WS Web服务客户端时遇到了很多问题.事实证明,没有直接的指导如何实现这一点,所以我决定将这个简短的wiki条目放在一起,希望它可能对其他人有用. 首先,Weblogic 9.2一般不支持使用JAX-WS的Web服务.它附带了与最新的JAX-WS不兼容的旧版XML相关的Java库(Axis2也出现了类似的问题,只有Axis1似乎与Weblogi
我最近在尝试在Weblogic 9.2上部署JAX-WS Web服务客户端时遇到了很多问题.事实证明,没有直接的指导如何实现这一点,所以我决定将这个简短的wiki条目放在一起,希望它可能对其他人有用.

首先,Weblogic 9.2一般不支持使用JAX-WS的Web服务.它附带了与最新的JAX-WS不兼容的旧版XML相关的Java库(Axis2也出现了类似的问题,只有Axis1似乎与Weblogic 9.x完美配合,但这是一个非常古老且不受支持的库).

因此,为了使其正常工作,需要进行一些黑客攻击.这就是我做的方式(注意我们在我们的遗留公司项目中使用了ant,你可能应该使用maven,它应该消除以下50%的步骤):

1.从https://jax-ws.dev.java.net/下载最新的JAX-WS发行版(我得到的确切版本是JAXWS2.2-20091203.zip)

2.将JAX-WS jar与依赖项放在一个单独的文件夹中,如lib / webservices.

3.在ant中创建一个模式集来引用这些jar:

<?xml version="1.0"?>
<patternset id="jaxws.classpath">
<include name="webservices/jsr173_api.jar" />  
<include name="webservices/jsr181-api.jar" />       
<include name="webservices/jaxb-api.jar" />
<include name="webservices/jaxb-impl.jar" />
<include name="webservices/jaxb-xjc.jar" /> 
<include name="webservices/jaxws-tools.jar" />
<include name="webservices/jaxws-rt.jar" />       
<include name="webservices/jaxws-api.jar" />
<include name="webservices/policy.jar" />
<include name="webservices/woodstox.jar" />   
<include name="webservices/streambuffer.jar" />       
<include name="webservices/stax-ex.jar" />
<include name="webservices/saaj-api.jar" />
<include name="webservices/saaj-impl.jar" />
<include name="webservices/gmbal-api-only.jar" />   
</patternset>

4.在您的WAR相关目标中包含模式集.这看起来像是这样的:

<?xml version="1.0"?>
<copy todir="${wardir.lib}" includeEmptyDirs="false" flatten="true">
<fileset dir="${libs}">
<!--lots of libs here, related to your project -->
<patternset refid="jaxws.classpath"/>
</fileset>
</copy>

(不是flatten =“true”参数 – 这很重要,因为Weblogic 9.x默认情况下不够智能,无法访问位于WAR文件中不同于WEB-INF / lib的lcoation中的jar)

5.如果发生冲突,Weblogic默认使用自己的jar.我们希望它使用我们应用程序中的JAX-WS jar.这是通过准备weblogic-application.xml文件并将其放在deplotyed EAR文件的META-INF文件夹中来实现的.它应该如下所示:

<?xml version="1.0"?>
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<prefer-application-packages>
    <package-name>javax.jws.*</package-name>
    <package-name>javax.xml.bind.*</package-name>
    <package-name>javax.xml.crypto.*</package-name>
    <package-name>javax.xml.registry.*</package-name>
    <package-name>javax.xml.rpc.*</package-name>
    <package-name>javax.xml.soap.*</package-name>
    <package-name>javax.xml.stream.*</package-name>
    <package-name>javax.xml.ws.*</package-name>
    <package-name>com.sun.xml.api.streaming.*</package-name>
</prefer-application-packages>
</weblogic-application>

6.记得将weblogic-application.xml文件放在你的EAR中!蚂蚁的目标可能类似于:

<?xml version="1.0"?>
<target name="build-ear" depends="war, manifest">
    <delete dir="${dist}"/>
    <mkdir dir="${dist}"/>    
    <jar destfile="${warfile}" basedir="${wardir}"/>        
    <ear destfile="${earfile}" appxml="resources/${app.name}/application.xml">
        <fileset dir="${dist}" includes="${app.name}.war"/>
        <metainf dir="resources/META-INF"/>     
    </ear>
</target>

7.此外,您需要告诉weblogic更喜欢您的WEB-INF类和发布中的类.您可以通过在WEB-INF / weblogic.xml文件中放置以下行来完成此操作:

<?xml version="1.0"?>
<container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>

8.这就是与weblogic相关的配置.现在只设置你的JAX-WS目标.下面的内容将简单地基于本地部署的WSDL文件生成Web服务存根和类,并将它们放在应用程序的文件夹中:

<?xml version="1.0"?>
<target name="generate-jaxws-client">
        <taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport"> 
            <classpath path="classpath.main"/>
        </taskdef>          
        <wsimport 
             destdir="${src}"
             package="acme.somewhere.in.your.package.tree.webservices."
             keep="true" 
             wsdl="http://localhost:8088/mockWebService?WSDL">              
        </wsimport>
    </target>

请记住keep =“true”参数.没有它,wsimport会生成类并且……删除它们,信不信由你!

对于模拟Web服务,我建议使用SOAPUI,一个开源项目.非常易于部署,对于Web服务集成测试至关重要.

我们快到了.最后是编写一个用于测试Web服务的Java类,尝试首先将其作为独立应用程序运行(或作为单元测试的一部分)

10.然后尝试使用Weblogic运行相同的代码.它应该工作.它对我有用.经过3天的挫折.

是的,我知道我应该将9和10放在一个子弹点下,但标题“使用ant在Web逻辑9.2下部署JAX-WS Web服务的10个步骤”听起来好多了.

如果您发现缺少某些内容,请编辑此帖并进行改进!

这不是一个问题,而是一个指南,所以我自己回答它只是为了将其标记为已完成.

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消