Many JAX-WS endpoints in sun-jaxws.xml

Just started using JAX-WS. I created 2 test web services in a single WAR file as follows ....

package com.djs; import javax.jws.WebService; @WebService() public class AddTwoInts { public int performAdd(int firstNum, int secondNum) { return firstNum + secondNum; } } 

A.....

 package com.djs; import javax.jws.WebService; @WebService() public class SayHello { public String sayHello(String inwards) { return "Hello " + inwards; } } 

This is my web.xml

 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <listener> <listener-class> com.sun.xml.ws.transport.http.servlet.WSServletContextListener </listener-class> </listener> <servlet> <servlet-name>jaxws</servlet-name> <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>jaxws</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> 

This is sun-jaxws.xml

 <?xml version="1.0" encoding="UTF-8"?> <endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'> <endpoint name='performAdd' implementation='com.djs.AddTwoInts' url-pattern='/AddTwoInts' /> <endpoint name='sayHello' implementation='com.djs.SayHello' url-pattern='/SayHello' /> </endpoints> 


I deploy to Tomcat 7 and use http://localhost:8080/MyApp/AddTwoInts?wsdl to get the WSDL for AddTwoInts OK .... But when I do http://localhost:8080/MyApp/SayHello?wsdl , I I get an error on page 404.

Any advice is appreciated.

+4
source share
2 answers

Dave

I think you are missing the servlet mapping for the two endpoints that you have.

Add the following to your web.xml and try again. Let me know if this solves the problem.

 <servlet> <servlet-name>AddTwoInts</servlet-name> <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AddTwoInts</servlet-name> <url-pattern>/AddTwoInts</url-pattern> </servlet-mapping> <servlet> <servlet-name>SayHello</servlet-name> <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SayHello</servlet-name> <url-pattern>/SayHello</url-pattern> </servlet-mapping> 
+12
source

You want web.xml to reference only one servlet, urlMapping /:

  <servlet> <servlet-name>services</servlet-name> <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>services</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> 

Then include some endpoints on the full desired path in sun-jaxws.xml:

 <endpoint name='performAdd' implementation='com.djs.AddTwoInts' url-pattern='/AddTwoInts' /> <endpoint name='sayHello' implementation='com.djs.SayHello' url-pattern='/couldhavemore/SayHello' /> 

Check out "canhavemore" there ... you can add to the corresponding path in the sun-jaxws.xml file to get the full desired path. I have one service for working with the login to web.xml of something other than /, but then you need a web.xml entry for each service. It seems that you need to work a lot, you need to use / and then put the full path in sun-jaxws.xml.

+2
source

All Articles