Posted by
arungupta on June 18, 2007 at 5:28 PM PDT
Fabian
explained how
WSIT features can be
configured on
Java SE 6
Endpoint
API exposed as part of
JAX-WS
2.1. In this blog, I start with a Reliable Messaging-enabled endpoint
developed using
NetBeans IDE 5.5.1 and
WSIT plug-in and then provide
detailed steps, along with code, to deploy it in Java SE 6.
- Create a Reliable Web service endpoint using WSIT plug-in and NetBeans
5.5.1 by watching
this screencast.
- Download and install
WSIT Milestone 5. Copy webservices-api.jar in Java SE 6 '
jre\lib\endorsed'
directory.
- All the capabilities enabled at an endpoint, such as Reliable Messaging
for this one, are stored in the WSIT configuration file. In NetBeans IDE,
expand your Project, '
Web Pages', 'WEB-INF'. The
configuration file be named something similar to 'wsit-server.HelloWebService.xml'
following the format 'wsit-<packageName>.<ServiceName>.xml'.
Here is how the config file looks like:
<?xml version="1.0" encoding="UTF-8"?>
<definitions
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" name="HelloWebServiceService"
targetNamespace="http://server/"
xmlns:tns="http://server/"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wsaws="http://www.w3.org/2005/08/addressing"
xmlns:wsrm="http://schemas.xmlsoap.org/ws/2005/02/rm/policy">
<message name="sayHello"/>
<message name="sayHelloResponse"/>
<portType name="HelloWebService">
<wsdl:operation name="sayHello">
<wsdl:input message="tns:sayHello"/>
<wsdl:output message="tns:sayHelloResponse"/>
</wsdl:operation>
</portType>
<binding name="HelloWebServicePortBinding" type="tns:HelloWebService">
<wsp:PolicyReference URI="#HelloWebServicePortBindingPolicy"/>
<wsdl:operation name="sayHello">
<wsdl:input/>
<wsdl:output/>
</wsdl:operation>
</binding>
<service name="HelloWebServiceService">
<wsdl:port name="HelloWebServicePort" binding="tns:HelloWebServicePortBinding"/>
</service>
<wsp:Policy wsu:Id="HelloWebServicePortBindingPolicy">
<wsp:ExactlyOne>
<wsp:All>
<wsaws:UsingAddressing xmlns:wsaws="http://www.w3.org/2006/05/addressing/wsdl"/>
<wsrm:RMAssertion/>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
</definitions>
Copy this config file by the name wsit-server.HelloWebService.xml in META-INF directory in your classpath.
- The Web service implementation class looks like:
package server;
import javax.jws.*;
@WebService(targetNamespace="http://server/")
public class HelloWebService {
@WebMethod
public String hello(@WebParam(name="name")String text) {
return "Hello " + text;
}
}
As you see, this is a plain JAX-WS Web service endpoint class.
- The JAX-WS Endpoint code that starts the Web service endpoint looks like:
package server;
import java.io.IOException;
import javax.xml.ws.Endpoint;
public class Main {
private static final int PORT = 58888;
private static final String HOST = "localhost";
public static void main(String[] args) {
Endpoint endpoint = Endpoint.create(new HelloWebService());
String address = "http://" + HOST + ":" + PORT + "/";
endpoint.publish(address);
System.out.println("Endpoint hosted at ... " + address);
}
}
- The sequence of commands to deploy the endpoint is:
"\Program Files\Java\jdk1.6.0_01\bin\javac.exe" -d . server\*.java
"\Program Files\Java\jdk1.6.0_01\bin\wsgen.exe" -cp . server.HelloWebService
java -classpath .;\jax-ws-latest-wsit\lib\webservices-rt.jar server.Main
- And then you see the following output on the command prompt:
java -classpath .;C:\testbed\jax-ws-latest-wsit\lib\webservices-rt.jar server.Main
Jun 18, 2007 4:46:34 PM [com.sun.xml.ws.policy.jaxws.PolicyConfigParser] parse
INFO: WSP1049: Loaded WSIT configuration from file:
file:/C:/workarea/wsit/javase6/META-INF/wsit-server.HelloWebService.xml
Jun 18, 2007 4:46:34 PM [com.sun.xml.ws.tx.common.TxMapUpdateProvider] update
INFO: WSTX-COMMON-2005: running in a non Java EE container; disable mapping of Container
Managed Transaction EJB to WS-AT Policy assertions due to 'javax/ejb/TransactionManagement'
Endpoint hosted at ... http://localhost:58888/
That's it, the endpoint now deployed at 'http://localhost:58888/MyService?wsdl'
is Reliable Messaging enabled. This endpoint can be invoked using any of the
methods
shown here.
Technorati:
webservices wsit
jax-ws
glassfish
javase6