2015-09-17 38 views
1

我有一個Java類,它有一個@WebService註釋並打包在WAR中。將WAR部署到不同的JavaEE 6應用程序服務器時,我希望擁有相同的URL(當然,使用不同的主機和端口...)。JAX-WS - 如何配置完整的URL

默認命名似乎取決於應用程序服務器。一些例子:

Glassfish的:

的http:// {主機名或IP}:{端口}/{服務名稱}/{端口名}

JBoss的:

HTTP:// {主機名或IP}:{端口}/{EJB-JAR-名稱}/{服務名}/{端口名}

的WebSphere:

的http:// {主機名或IP}:{端口}/{EJB-JAR名}/{服務名}

什麼是這個配置對所有服務器廠商的最簡單的方法?

回答

2

如果您要創建基於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 

這可能不是FOT所有應用程序的服務器的工作,我知道它對於GlassFish,WildFly和Weblogic的。

最後,企業Web服務的默認命名(例如EJB WebServices,ejb-jar內部的ear文件)與應用服務器相關。我一直在使用Google,並試圖在幾個月內完成此配置,並獲得相同的結果。無論您是否提供完整的@WebService註釋配置(包括有效的wsdl及預期的端點配置),應用服務器都會覆蓋wsdl端點URL。

+0

感謝您提供的信息!關於您最後一段的一個問題:您的意思是「企業網絡服務」與您上面描述的相反嗎? – jens

+0

當我說企業Web服務時,我指的是JSR-109,它是一種將Java-ee組件(如Enterprise Java Beans(EJB))作爲Web服務公開的簡單而強大的方式。 –