具有相同上下文根的多个 Web 服务

Multiple web services with same context root

我正在将使用 java EJB 并安装在 WebLogic 8.1 中的 Web 服务升级到 WebLogic 12c 中的 JAX-RPC Web 服务(WebLogic Server 版本:12.2.1.3.0)

它们是同一项目中具有相同上下文根的多个 WS。所以每个地址都是这样的:

[server]:[port]/services/ws1
[server]:[port]/services/ws2
[server]:[port]/services/ws3
...

在我的开发过程中,我无法为所有 Web 服务设置相同的上下文 root/path "services"。

是否可以为所有这些设置相同的上下文根? (像上面的例子?)

详细说明: 我有一个 "Weblogic Web Services Project"(Eclipse-> 新项目 ->Oracle->WebLogic->Web 服务-> Web 服务项目),其中包含多个 Web 服务。

Web 服务是从每个带有 ANT wsdlc 的 WSDL 中创建的。所以我得到了 "ws.jar"(编译的 WSDL)和 wsImpl.java(我放置业务代码的地方)

所以 "source files" 的最终列表如下所示:

ws1.jar
wsImpl1.java
ws2.jar
wsImpl2.java
ws3.jar
wsImpl3.java
...

然后我尝试 运行 使用多个 jws 的 ANT jwsc,每个 WS 一个,给它们所有的 contextpath="services"。 当它到达第二个 jws 时,我得到错误 "Context path services for web application my/package/ws2.war is already in use by this application."

<target name="build-service">
    <jwsc srcdir="${src.dir}" destdir="${final.dir}/wars" verbose="true" keepGenerated="false" debug="on" includeantruntime="false">
    <classpath refid="project.class.path.build.services" />

    <jws file="my/package/ws1Impl.java" compiledWsdl="${output.dir}/compiledWsdl/ws1.jar">
        <WLHttpTransport contextpath="services" serviceuri="ws1" portname="ws1Port" />
    </jws>
    <jws file="my/package/ws2Impl.java" compiledWsdl="${output.dir}/compiledWsdl/ws2.jar">
        <WLHttpTransport contextpath="services" serviceuri="ws2" portname="ws2Port" />
    </jws>

        </jwsc>
</target>

根据@EmmanuelCollin 的评论,我能够进行更好的搜索并找到使用

的解决方案
<module contextPath="services" name="myJar" >
   <jws .../>
   <jws .../>
</module>

如: Oracle Help Center"Example 4 Packaging Multiple Web Services Into a Single WAR File"

然后我用 ANT 将生成的 aplication.xml 和 .war 文件打包到一个 .ear 中:

<ear destfile="${dist.dir}/${ant.project.name}.ear" appxml="${conf.dir}/application.xml">  
 <metainf dir="${build.dir}/META-INF"/> 
 <fileset dir="${dist.dir}" includes="*.jar,*.war"/>
</ear>

最后,将 .ear 部署到 weblogic 12c 服务器并成功测试了 Web 服务响应。都在同一个contextPath下。

谢谢!