【问题标题】:Change JAX-WS Service URL更改 JAX-WS 服务 URL
【发布时间】:2013-07-14 21:02:59
【问题描述】:

在创建 JAX-WS 网络服务时是否可以更改网络服务 URL?

自动 URL 是(在 Glassfish 3 上):http://<host>/<context>/<Servicename>,但我需要的是:http://<host>/<context>/axis/services/<Servicename>(因为它是从轴到 JAX-WS 的端口)

有没有办法告诉 JAX-WS 在哪里发布 WS?

无法使用 sun-jaxws.xml,因为它会禁用 @EJB/@Inject DI。

【问题讨论】:

  • JAX-WS 没有@Path@Path 是 Restful 服务的注解。但是我试过了,还是不行。

标签: java web-services glassfish jax-ws


【解决方案1】:

您可以为您的 JAX-WS 实现类指定 servlet 映射。默认情况下,不需要 servlet 映射,JAX-WS 框架会为您生成它。由于您想为您的 Web 服务服务提供自定义 URL 映射,您可以提供带有自定义 URL 的 servlet 映射。

示例:

<servlet>
    <display-name>CalculatorService</display-name>
    <servlet-name>CalculatorService</servlet-name>
    <servlet-class>
        org.apache.geronimo.samples.jws.CalculatorService
    </servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>CalculatorService</servlet-name>
    <url-pattern>/axis/services/calculator</url-pattern>
</servlet-mapping>

请参阅https://geronimo.apache.org/GMOxDOC20/simple-web-service-with-jax-ws.htmlhttp://pic.dhe.ibm.com/infocenter/wasinfo/v8r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Ftwbs_customwebxml.html

【讨论】:

  • 我已经试过了。但我得到的只是一个异常:org.glassfish.deployment.admin.DeployCommand 执行严重:部署应用程序时出现异常 [webservice]:这里没有名为 MyWebservice 的 Web 组件。警告:发生错误 java.lang.RuntimeException:此处没有名称为 MyWebservice 的 Web 组件。在 com.sun.enterprise.deployment.node.web.WebCommonNode.endElement(WebCommonNode.java:228) 在 com.sun.enterprise.deployment.node.SaxParserHandler.endElement(SaxParserHandler.java:481) 在 ...跨度>
  • 这与您的答案完全不同...但正如我在问题中已经写的:我不能使用 sun-jaxws.xml,因为它破坏了 Web 服务的 EJB/CDI 功能。仅供参考:我已经问过谷歌...
【解决方案2】:

我在相同的上下文中遇到了同样的问题。一些要传入 JAX-WS 的axis2 web 服务;所以我必须保持相同的 url 映射(http://[host]:[port]/[context]/services/[serviceName])。

起初,我尝试在 WS 的 impl 类上使用带有 url 模式的 @WebServlet 注释。它适用于 JBoss AS 7.1 和 Weblogic Server 12,但 WebSphere AS 8 不喜欢。这是因为 HttpServlet 类没有扩展,但是如果你通过 web.xml 做同样的事情,它就可以工作。

在 web.xml 中添加一项 Web 服务:

<servlet>
    <servlet-name>OMInjector</servlet-name>
    <servlet-class>fr.fmoisson.kijq.services.OMInjector</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>OMInjector</servlet-name>
    <url-pattern>/services/OMInjector</url-pattern>
</servlet-mapping>

【讨论】:

  • 感谢您的建议,但 Glassfish 忽略了 @WebServlet 注释,当我在 web.xml 中配置它时出现以下异常:org.apache.catalina.LifecycleException: java.lang.ClassCastException: packagename.IoWebService cannot be cast to javax.servlet.Servlet
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多