Skip to content

Instantly share code, notes, and snippets.

@dmorgantini
Created August 13, 2012 14:37
Show Gist options
  • Save dmorgantini/3341293 to your computer and use it in GitHub Desktop.
Save dmorgantini/3341293 to your computer and use it in GitHub Desktop.
Use SOAP with dropwizard
package com.example.helloworld.resources;
import javax.jws.WebMethod;
@javax.jws.WebService(
name = "AddNumbersPortType",
serviceName = "AddNumbersService",
targetNamespace = "http://duke.example.org")
@javax.jws.soap.SOAPBinding(
style = javax.jws.soap.SOAPBinding.Style.DOCUMENT,
use = javax.jws.soap.SOAPBinding.Use.LITERAL,
parameterStyle = javax.jws.soap.SOAPBinding.ParameterStyle.WRAPPED)
public class AddNumbersService {
@WebMethod
public int Add(int a, int b) {
return a + b;
}
}
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.2.6-2</version>
</dependency>
public class SoapBundle implements Bundle {
@Override
public void initialize(Environment environment) {
environment.addServlet(new com.sun.xml.ws.transport.http.servlet.WSServlet(), "/SOAP/*");
environment.addServletListeners(new com.sun.xml.ws.transport.http.servlet.WSServletContextListener());
}
}
<?xml version="1.0" encoding="UTF-8"?>
<endpoints
xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
version="2.0">
<endpoint
name="HelloWorld"
implementation="com.example.helloworld.resources.AddNumbersService"
url-pattern="/SOAP/add"/>
</endpoints>
@anchoo2kewl
Copy link

The missing "/WEB-INF/sun-jaxws.xml" is caused due to the WSServletContextListener trying to fetch the URL to sunJaxWsXml. Stepping through the code got me to the ContextHandler which checks the _baseResource value, which was never set when setting the servlet.
The most important bit is to set the resource base, without which the context would never find xml file, no matter where you place the file.

I am using dropwizard 0.7.1 and I add this to the run method of my Application class.

ServletEnvironment servlet = environment.servlets();
servlet.setResourceBase("/");
servlet.addServlet("/SOAP/*", new com.sun.xml.ws.transport.http.servlet.WSServlet());
servlet.addServletListeners(new com.sun.xml.ws.transport.http.servlet.WSServletContextListener());

And then ensure /WEB-INF/sun-jaxws.xml exists in the root directory.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment