2013-07-16 4 views
5

Gibt es eine Möglichkeit, die Webservice-URL beim Erstellen eines JAX-WS-Webdienstes zu ändern?JAX-WS-Dienst-URL ändern

Die automatische URL ist (auf Glassfish 3): http://<host>/<context>/<Servicename>, aber was ich brauche, ist: http://<host>/<context>/axis/services/<Servicename> (weil es ein Port von Achse zu JAX-WS ist)

Gibt es eine Möglichkeit JAX-WS zu sagen, Wo ein WS veröffentlichen?

Die Verwendung von sun-jaxws.xml ist nicht möglich, da @ EJB/@ Inject DI deaktiviert wird.

+0

Es gibt keine '@ Path' bei JAX-WS,' @ Path' eine Annotation für Restful Dienstleistungen. Aber ich habe es versucht und es hat nicht funktioniert. – huzi

Antwort

3

Sie können die Servlet-Zuordnung für Ihre JAX-WS-Implementierungsklasse angeben. Standardmäßig ist das Servlet-Mapping nicht erforderlich und das JAX-WS-Framework generiert es für Sie. Wenn Sie eine benutzerdefinierte URL-Zuordnung für Ihren Web-Service-Service bereitstellen möchten, können Sie eine Servlet-Zuordnung mit der benutzerdefinierten URL bereitstellen.

Probe:

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

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

+0

Ich habe das schon probiert. aber alles, was ich bekomme, ist eine Ausnahme: org.glassfish.deployment.admin.DeployCommand ausführen SEVERE: Ausnahme bei der Bereitstellung der App [Webservice]: Es gibt keine Web-Komponente namens MyWebservice hier. WARNUNG: Fehler aufgetreten java.lang.RuntimeException: Es gibt keine Webkomponente mit dem Namen MyWebservice hier. bei com.sun.enterprise.deployment.node.web.WebCommonNode.endElement (WebCommonNode.java:228) bei com.sun.enterprise.deployment.node.SaxParserHandler.endElement (SaxParserHandler.java:481) bei .. – huzi

+0

Dies kann hilfreich sein http://stackoverflow.com/questions/15156171/glassfish-web-xml-servlet-mapping-to-webservice-gets-classcastexception. –

+0

Das ist ganz anders als deine Antwort ... Aber wie ich bereits in meiner Frage schrieb: Ich kann sun-jaxws.xml nicht verwenden, weil es die EJB/CDI-Fähigkeiten vom Web-Service zerstört. FYI: Ich habe bereits google ... – huzi

1

Ich habe das gleiche Problem mit dem gleichen Kontext. Einige axis2-Web-Services, die in JAX-WS übergeben werden sollen; also musste ich das gleiche URL Mapping beibehalten (http: // [host]: [port]/[context]/services/[serviceName]).

Zuerst versuchte ich mit @WebServlet Annotation mit einem URL-Muster auf der Impl-Klasse der WS. Es funktioniert auf JBoss AS 7.1 und Weblogic Server 12, aber WebSphere AS 8 mochte es nicht. Dies liegt daran, dass die HttpServlet-Klasse nicht erweitert wird. Wenn Sie dies jedoch mit der web.xml-Datei getan haben, funktioniert sie.

Für einen Web-Service in web.xml hinzuzufügen:

<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

Danke für Ihren Ratschlag, aber Glassfish ignoriert die '@ WebServlet' Annotation und wenn ich es in web.xml konfigurieren, tritt die folgende Ausnahme auf:' org.apache.catalina.LifecycleException: java.lang .ClassCastException: Paketname.IoWebService kann nicht in javax.servlet.Servlet' – huzi

+0

große Lösung umgewandelt werden! –