2013-07-16 101 views
5

創建JAX-WS webservice時是否有任何更改Webservice URL的可能性?更改JAX-WS服務URL

自動網址是(在Glassfish 3):http://<host>/<context>/<Servicename>,但我需要的是:http://<host>/<context>/axis/services/<Servicename>(因爲它是從軸到JAX-WS的端口)

有沒有辦法告訴JAX-WS在哪裏發佈WS?

使用sun-jaxws.xml是沒有選擇的,因爲它禁用了@EJB/@Inject DI。

+0

沒有'@ Path'在JAX-WS,'@ Path'是RESTful服務的一種詮釋。但我試過了,它不起作用。 – huzi

回答

3

您可以爲您的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

+0

我已經試過了。但是我得到的只是一個例外: org.glassfish.deployment.admin.DeployCommand執行 SEVERE:部署應用程序時出現異常[webservice]:此處沒有MyWebservice名稱的Web組件。 警告:發生錯誤 java.lang.RuntimeException:此處沒有MyWebservice名稱的Web組件。 at com.sun.enterprise.deployment.node.web.WebCommonNode.endElement(WebCommonNode.java:228) at com.sun.enterprise.deployment.node.SaxParserHandler.endElement(SaxParserHandler.java:481) at .. 。 – huzi

+0

這可能有幫助http://stackoverflow.com/questions/15156171/glassfish-web-xml-servlet-mapping-to-webservice-gets-classcastexception。 –

+0

這與你的答案完全不同......但正如我在我的問題中已經寫過的:我不能使用sun-jaxws.xml,因爲它破壞了來自Web服務的EJB/CDI功能。僅供參考:我已經問過谷歌... – huzi

1

我得到了相同的上下文相同的問題。某些axis2 Web服務要傳入JAX-WS;所以我必須保持相同的URL映射(http:// [host]:[port]/[context]/services/[serviceName])。

起初,我使用@WebServlet註釋在WS的impl類上使用了url模式。它適用於JBoss AS 7.1和Weblogic Server 12,但WebSphere AS 8不喜歡。這是因爲HttpServlet類沒有擴展,但是如果你通過web.xml完成​​相同的工作,它就可以工作。

對於一個Web服務在web.xml中添加:

<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> 
+0

感謝您的建議,但Glassfish忽略'@ WebServlet'註釋,並且當我在web.xml中配置它時,發生以下異常:'org.apache.catalina.LifecycleException:java.lang .ClassCastException:packagename.IoWebService無法轉換爲javax.servlet.Servlet' – huzi

+0

偉大的解決方案! –