Dropwizard-JAXWS is a Dropwizard Bundle that enables building SOAP web services and clients using JAX-WS API with Dropwizard.
- Uses Apache CXF web services framework (no Spring Framework dependency).
- Java First and WSDL first service development.
- Using standard JAX-WS annotations, without custom deployment descriptors.
- Metrics instrumentation: @Metered, @Timed and @ExceptionMetered annotations.
- Dropwizard validation support.
- Dropwizard Hibernate support (@UnitOfWork).
- Dropwizard basic authentication using Dropwizard Authenticator.
- Web service client factory.
- Support for JAX-WS handlers, MTOM, CXF interceptors(both client and server side) and CXF @UseAsyncMethod annotation.
To use dropwizard-jaxws in your project, add the following dependency to your pom.xml
:
<dependency>
<groupId>com.github.roskart.dropwizard-jaxws</groupId>
<artifactId>dropwizard-jaxws</artifactId>
<version>1.0.1</version>
</dependency>
SOAP service:
@Metered
@WebService
public HelloWorldSOAP {
@WebMethod
public String sayHello() {
return "Hello world!";
}
}
Dropwizard application:
public class MyApplication extends Application<MyApplicationConfiguration> {
private JAXWSBundle jaxWsBundle = new JAXWSBundle();
@Override
public void initialize(Bootstrap<MyApplicationConfiguration> bootstrap) {
bootstrap.addBundle(jaxWsBundle);
}
@Override
public void run(MyApplicationConfiguration configuration, Environment environment) throws Exception {
jaxWsBundle.publishEndpoint(
new EndpointBuilder("/hello", new HelloWorldSOAP()));
}
public static void main(String[] args) throws Exception {
new MyApplication().run(args);
}
}
Using HelloWorldSOAP web service client:
HelloWorldSOAP helloWorld = jaxWsBundle.getClient(
new ClientBuilder(HelloWorldSOAP.class, "http://server/path"));
System.out.println(helloWorld.sayHello());
Module dropwizard-jaxws-example
contains Dropwizard application (JaxWsExampleApplication
) with the following SOAP
web services and RESTful resources:
-
SimpleService: A minimal 'hello world' example.
-
JavaFirstService: Java first development example.
JavaFirstService
interface uses JAX-WS annotations.JavaFirstServiceImpl
contains service implementation instrumented with Metrics annotations. Service is secured with basic authentication usingdropwizard-auth
.BasicAuthenticator
implements DropwizardAuthenticator
.JavaFirstServiceImpl
accesses authenticated user properties via injected JAX-WSWebServiceContext
. -
WsdlFirstService: WSDL first development example. WSDL is stored in
resources/META-INF/WsdlFirstService.wsdl
. Code is generated usingcxf-codegen-plugin
which is configured inpom.xml
.WsdlFirstServiceImpl
contains service implementation with blocking and non-blocking methods.WsdlFirstServiceHandler
contains server-side JAX-WS handler. -
HibernateExampleService:
dropwizard-hibernate
example.HibernateExampleService
implements the service.@UnitOfWork
annotations are used for defining transactional boundaries.@Valid
annotation is used for parameter validation oncreatePerson
method.HibernateExampleService
accesses the database throughPersonDAO
. Embedded H2 database is used. Database configuration is stored in Dropwizard config fileconfig.yaml
. -
MtomService: WSDL first MTOM attachment example. WSDL is stored in
resources/META-INF/MtomService.wsdl
. Code is generated usingcxf-codegen-plugin
which is configured inpom.xml
.MtomServiceImpl
contains service implementation with MTOM enabled. -
AccessProtectedServiceResource: Dropwizard RESTful service which uses
JavaFirstService
client to invokeJavaFirstService
SOAP web service on the same host. User credentials are provided to access protected service. -
AccessWsdlFirstServiceResource: Dropwizard RESTful service which uses
WsdlFirstService
client to invokeWsdlFirstService
SOAP web service on the same host.WsdlFirstClientHandler
contains client-side JAX-WS handler. -
AccessMtomServiceResource: Dropwizard RESTful service which uses
MtomService
client to invokeMtomService
SOAP web service on the same host as an example for client side MTOM support. -
See
JaxWsExampleApplication
for examples on usage of client side JAX-WS handler and CXF interceptors.
After cloning the repository, go to the dropwizard-jaxws root folder and run:
mvn package
To run the example service:
java -jar dropwizard-jaxws-example\target\dropwizard-jaxws-example-1.0.1.jar server dropwizard-jaxws-example\config.yaml
When using maven-shade-plugin
for building fat jar, you must add the following transformer
element to plugin
configuration:
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/cxf/bus-extensions.txt</resource>
</transformer>
For example on building fat jar, see dropwizard-jaxws-example/pom.xml
.
When using Gradle and a recent version of shadowJar use the following snippet:
shadowJar {
// ...
append('META-INF/cxf/bus-extensions.txt')
}
Apache Software License 2.0, see LICENSE.
- Upgraded to Dropwizard 1.0.2.
- Upgraded to Dropwizard 1.0.0.
- Upgraded to CXF 3.1.6.
- Java 8 is used by default.
- Added support for publishedEndpointUrl (see Pull request #9).
- Added support for CXF @UseAsyncMethod annotation (see Pull request #8).
- Added support for multiple JAXWSBundle instances (see Issue #7).
- Upgraded to Dropwizard 0.9.2.
- Upgraded to Dropwizard 0.9.1.
- Upgraded to CXF 3.1.4.
- Project is now released to Maven Central. Maven coordinates were changed.
- Upgraded to Dropwizard 0.8.1.
- Upgraded to Dropwizard 0.8.0.
- Upgraded to CXF 3.0.4.
- Upgraded to Dropwizard 0.7.1.
- Upgraded to CXF 3.0.0.
- Added MTOM support and examples.
- Updated JAXWSBundle API: introduced EndpointBuilder and ClientBuilder.
- Added suport for CXF interceptors.
- Upgraded to Dropwizard 0.7.0.
- Upgraded to CXF 2.7.8.
- Initial Release (uses Dropwizard 0.6.2).