首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ant实现JAX客户端在Weblogic 9.2上的工作

用ant实现JAX客户端在Weblogic 9.2上的工作
EN

Stack Overflow用户
提问于 2010-05-21 10:56:23
回答 2查看 7K关注 0票数 4

最近我遇到了很多问题,试图在WebLogic9.2上部署客户端。事实证明,对于如何实现这一点并没有直接的指导,所以我决定把这个简短的wiki条目放在一起,希望它可能对其他人有用。

首先,Weblogic 9.2一般不支持使用JAX的web服务.它附带了与最新JAX不兼容的与XML相关的java库的旧版本(类似的问题发生在Axis2上,似乎只有Axis1能够完美地使用WebLogic9.x,但这是一个非常老的、不受支持的库)。

因此,为了使它工作,一些黑客是必要的。我就是这样做的(请注意,我们在遗留的企业项目中使用了ant,您可能应该使用maven,它应该删除下面这些步骤的50% ):

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

2.将JAX和依赖项放在一个单独的文件夹中,比如lib/webservices。

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

代码语言:javascript
复制
<?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.将模式集包含在与战争相关的目标中。这可能看起来像:

代码语言:javascript
复制
<?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“参数-WebLogic9.x在默认情况下不够聪明,无法访问与WAR文件中的WEB/lib不同的WAR),这一点很重要。

5.在发生冲突时,Weblogic默认使用自己的jars。我们希望它使用我们应用程序中的JAX。这是通过准备weblogic-application.xml文件并将其放在部署的EAR文件的META文件夹中实现的。它应该是这样的:

代码语言:javascript
复制
<?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文件放在耳朵里!蚂蚁的目标可能类似于:

代码语言:javascript
复制
<?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类。为此,您可以在WEB/weblogic.xml文件中放置以下行:

代码语言:javascript
复制
<?xml version="1.0"?>
<container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>

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

代码语言:javascript
复制
<?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服务交互测试至关重要。

9.我们快到了。最后一件事是编写一个Java类来测试web服务,首先尝试将它作为一个独立的应用程序运行(或者作为单元测试的一部分)。

10.然后尝试从Weblogic运行相同的代码。应该管用的。对我起作用了。经历了3天的挫折。是的,我知道我应该把9和10放在一个单一的项目下,但是标题“在web逻辑9.2下使用ant部署JAX服务的10个步骤”听起来要好得多。

请编辑这篇文章,如果你发现遗漏了什么,请改进它!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-21 11:13:11

这不是一个真正的问题,而是一个指南,所以我自己回答它,只是为了标记它已经做好了。

票数 2
EN

Stack Overflow用户

发布于 2010-06-02 14:03:27

在WebLogic9.2上处理web服务的另一种方法是使用Apache。这与Spring集成得特别好,因为每个web服务都以bean的形式公开,而实际的类甚至不需要知道它们是web服务,这都是由配置驱动的。

关于在Weblogic上设置Apache的一个很好的指南可以在这里找到:http://wheelersoftware.com/articles/spring-cxf-web-services.html

这也适用于WebLogic9.2,如果您需要公开web服务,而不仅仅是连接到现有服务,这比使用普通JAXWS (反正是CXF使用的)要好得多。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2881411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档