2013-07-16 7 views
5

Czy istnieje możliwość zmiany adresu URL usługi WebService podczas tworzenia usługi sieciowej JAX-WS?Zmiana adresu URL usługi JAX-WS

Automatyczne URL (na GlassFish 3): http://<host>/<context>/<Servicename>, ale to, co jest mi potrzebne: http://<host>/<context>/axis/services/<Servicename> (ponieważ jest to port od osi do JAX-WS)

Czy istnieje jakiś sposób, aby powiedzieć JAX-WS gdzie opublikować WS?

Używanie sun-jaxws.xml nie jest opcją, ponieważ wyłącza @ EJB/@ Inject DI.

+0

Nie ma '@ Path' w JAX-WS,' @ Path' jest Adnotacja dla usług spokojny. Ale próbowałem i to nie działało. – huzi

Odpowiedz

3

Można określić mapowanie serwletu dla klasy implementacji JAX-WS. Domyślnie mapowanie serwletów nie jest wymagane, a struktura JAX-WS generuje je dla ciebie. Aby udostępnić niestandardowe mapowanie adresów URL dla usługi usług sieciowych, można udostępnić mapowanie serwletu przy użyciu niestandardowego adresu URL.

Próbka:

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

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

+0

Próbowałem już tego. ale dostaję tylko wyjątek: org.glassfish.deployment.admin.DeployCommand wykonaj SEVERE: Wyjątek podczas wdrażania aplikacji [webservice]: Nie ma tutaj składnika Web o nazwie MyWebservice. OSTRZEŻENIE: Wystąpił błąd wyjątek java.lang.RuntimeException: tutaj nie ma komponentu sieciowego o nazwie MyWebservice. w com.sun.enterprise.deployment.node.web.WebCommonNode.endElement (WebCommonNode.java:228) w com.sun.enterprise.deployment.node.SaxParserHandler.endElement (SaxParserHandler.java:481) w .. – huzi

+0

Może to być pomocna http://stackoverflow.com/questions/15156171/glassfish-web-xml-servlet-mapping-to-webservice-gets-classcastexception. –

+0

To jest zupełnie inna odpowiedź niż odpowiedź ... Ale jak już napisałem w moim pytaniu: Nie mogę użyć sun-jaxws.xml, ponieważ niszczy on umiejętności EJB/CDI z serwisu internetowego. FYI: Już zapytałem google ... – huzi

1

Mam ten sam problem w tym samym kontekście. Niektóre usługi sieciowe osi 2 do przekazania w JAX-WS; więc musiałem zachować to samo mapowanie adresów URL (http: // [host]: [port]/[kontekst]/services/[nazwa usługi]).

Najpierw próbowałem z adnotacją @WebServlet z wzorcem adresu URL w klasie impl z WS. Działa na JBoss AS 7.1 i Weblogic Server 12, ale produkt WebSphere AS 8 nie lubił. Dzieje się tak z powodu braku rozszerzania klasy HttpServlet, ale jeśli zrobiłeś to samo przez web.xml, to działa.

Na jeden serwis internetowy, aby dodać w 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

Dzięki za twoją radę, ale Glassfish ignoruje adnotację '@ WebServlet' i kiedy konfiguruję ją w web.xml pojawia się następujący wyjątek:' org.apache.catalina.LifecycleException: java.lang .ClassCastException: nazwaUdziału pakietu.IoWebService nie można przesłać do javax.servlet.Servlet' – huzi

+0

świetne rozwiązanie! –