06 Dezember 2014

Contract First Web Service with NetBeans

From time to time I have to implement some SOAP based web services. Usually these web services are used for application integration so the contract first approach is used where one creates the WSDL  document first.

To create the server stub from the WSDL document I found out that using Maven in combination with NetBeans is the most straight forward approach.

Just choose "New File" from the menu:



After clicking on Next you need to enter the name of the service to create and provide the WSDL document:


Now just hit finish and have a look at what the wizard has generated.

First the web service server stub:

package ch.simas.demo.ws;

import javax.ejb.Stateless;
import javax.jws.WebService;

@WebService(serviceName = "CalculatorService", portName = "ICalculator", endpointInterface = "org.example.ICalculator", targetNamespace = "http://Example.org", wsdlLocation = "META-INF/wsdl/calculator.wsdl")
@Stateless
public class CalculatorService {

    public java.lang.Integer add(java.lang.Integer a, java.lang.Integer b) {
        //TODO implement this method
        throw new UnsupportedOperationException("Not implemented yet.");
    }

    public java.lang.Integer subtract(java.lang.Integer a, java.lang.Integer b) {
        //TODO implement this method
        throw new UnsupportedOperationException("Not implemented yet.");
    }
    
}

That's not very impressive but let's have a look at the pom.xml

<plugin>
  <groupId>org.jvnet.jax-ws-commons</groupId>
  <artifactId>jaxws-maven-plugin</artifactId>
  <version>2.3</version>
  <executions>
    <execution>
      <goals>
        <goal>wsimport</goal>
      </goals>
      <configuration>
        <wsdlFiles>
          <wsdlFile>calculator.wsdl</wsdlFile>
        </wsdlFiles>
 <staleFile>${project.build.directory}/jaxws/stale/calculator.stale</staleFile>
      </configuration>
      <id>wsimport-generate-calculator</id>
      <phase>generate-sources</phase>
    </execution>
  </executions>
  <dependencies>
    <dependency>
      <groupId>javax.xml</groupId>
      <artifactId>webservices-api</artifactId>
      <version>2.0</version>
    </dependency>
  </dependencies>
  <configuration>                          <sourceDestDir>${project.build.directory}/generated-sources/jaxws-wsimport</sourceDestDir>
    <xnocompile>true</xnocompile>
    <verbose>true</verbose>
    <extension>true</extension>
    <catalog>${basedir}/src/jax-ws-catalog.xml</catalog>
    <target>2.0</target>
  </configuration>
</plugin>

As you can see all the necessary configuration for the jaxws-maven-plugin is done!

In my opinion NetBeans has far the best integration of Maven and you don't have to configure both your IDE and Maven because NetBeans relays on the configuration in the pom.xml.

1 Kommentar:

reginald surict hat gesagt…

Thanks for a nice post. I grabbed lots of useful information from it. See also this site about XNSPY.