具有相同上下文根的多个 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下。
谢谢!
我正在将使用 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下。
谢谢!