【问题标题】:JAX-WS - how to configure complete URLJAX-WS - 如何配置完整的 URL
【发布时间】:2015-09-17 11:54:45
【问题描述】:

我有一个 Java 类,它有一个 @WebService 注释并被打包在一个 WAR 中。将 WAR 部署到不同的 JavaEE 6 应用程序服务器时,我希望拥有相同的 URL(当然具有不同的主机和端口...)。

默认命名似乎依赖于应用服务器。一些例子:

玻璃鱼:

http://{hostname or ip}:{port}/{service name}/{port name}

JBoss:

http://{hostname or ip}:{port}/{ejb-jar-name}/{service name}/{port name}

WebSphere:

http://{hostname or ip}:{port}/{ejb-jar-name}/{service name}

为所有服务器供应商配置此功能的最简单方法是什么?

【问题讨论】:

    标签: java web-services jakarta-ee jboss jax-ws


    【解决方案1】:

    如果您正在基于 POJO 类创建 Web 服务,那么您只需将您的 war 文件打包到一个 ear 文件中,并在 application.xml 配置文件中定义 Web 模块的上下文根。 这是一个 application.xml 文件示例:

    <?xml version="1.0" encoding="UTF-8"?>
    <application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" version="5">
      <display-name>simple-ws-app</display-name>
      <module>
        <web>
          <web-uri>simple-ws-war.war</web-uri>
          <context-root>/simple-ws-app</context-root>
        </web>
      </module>
      <library-directory>lib</library-directory>
    </application>
    

    在注解@WebService 中你可以配置期望的web 服务配置,如果你有一个wsdl 文件那么定义web 服务就更容易了。这里是一个完整的@WebService注解配置示例,只使用你需要的属性。

    @WebService(name = "SimpleService",
            serviceName = "SimpleService",
            portName = "SimpleServicePort",
            endpointInterface = "simple.ws.srv.SimpleServicePortType",
            targetNamespace = "http://www.ws.simple/srv",
            wsdlLocation = "WEB-INF/wsdl/simple-ws.wsdl"
    )
    

    请注意,如果您使用的是 wsdl 文件,则默认放置它的位置是 WEB-INF/wsdl。

    现在,此配置的预期 wsdl URL 是

    http://hostname:port/simple-ws-app/SimpleService?wsdl
    

    这可能不适用于所有应用服务器,我知道它适用于 Glassfish、WildFly 和 Weblogic。

    最后,企业 Web 服务的默认命名(例如 EJB WebServices、ear 文件中的 ejb-jar)实际上是依赖于应用服务器的。几个月来,我一直在谷歌搜索并尝试完成此配置,结果相同。无论您是否提供完整的 @WebService 注释配置,包括具有预期端点配置的有效 wsdl,app-servers 都会覆盖 wsdl 端点 URL。

    【讨论】:

    • 感谢您提供的信息!关于你最后一段的一个问题:与你上面描述的相比,你所说的“企业网络服务”到底是什么意思?
    • 当我说企业 Web 服务时,我指的是 JSR-109,它是一种将 java-ee 组件(如 Enterprise Java Beans (EJB) 作为 Web 服务)公开的简单而强大的方法。跨度>
    猜你喜欢
    • 2015-03-29
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 2013-07-14
    • 2011-11-18
    • 1970-01-01
    相关资源
    最近更新 更多