Miles to go …

June 18, 2007

Tango on JavaSE 6

Filed under: webservices — arungupta @ 5:28 pm

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.

  1. Create a Reliable Web service endpoint using WSIT plug-in and NetBeans 5.5.1 by watching this screencast.
  2. Download and install WSIT Milestone 5. Copy webservices-api.jar in Java SE 6 ‘jre\lib\endorsed‘ directory.
  3. 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.

  4. 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.

  5. 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);
       }
    }
    
  6. 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.HelloWebServicejava -classpath .;\jax-ws-latest-wsit\lib\webservices-rt.jar server.Main
  7. And then you see the following output on the command prompt:
    java -classpath .;C:\testbed\jax-ws-latest-wsit\lib\webservices-rt.jar server.MainJun 18, 2007 4:46:34 PM [com.sun.xml.ws.policy.jaxws.PolicyConfigParser] parseINFO: WSP1049: Loaded WSIT configuration from file:
    file:/C:/workarea/wsit/javase6/META-INF/wsit-server.HelloWebService.xmlJun 18, 2007 4:46:34 PM [com.sun.xml.ws.tx.common.TxMapUpdateProvider] updateINFO: 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

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • DZone
  • email
  • StumbleUpon
  • Technorati
  • Twitter
  • Slashdot
Related posts:
  1. WS-Addressing Member Submission Policy Assertion Namespace Change in WCF
  2. TOTD #4: How to convert a Session EJB to a Web service ?
  3. GlassFish V2 Beta3 and Vista – Interoperable out-of-the-box
  4. Tango and Web Service Designer in NetBeans 6
  5. TOTD #22: Java SE client for a Metro endpoint

9 Comments »

  1. Good stuff! Some smileys in the listings, though – I think you need to turn off a plugin…

    Comment by Pat Patterson — June 18, 2007 @ 11:51 pm

  2. Thanks Pat for the comment! I thought those smileys were cute :) But to be meaningful and listening to my readers, turned off the plugin.

    Comment by Arun — June 19, 2007 @ 6:03 am

  3. Awesome stuff.. very helpful. Can you give me the code how to write for login page using web service in java. It would be helpful. thank you

    Comment by saikrishna — November 2, 2007 @ 7:35 am

  4. saikrishna, The code will be no different that invoking any other Web service. You just need to make sure your client-side artifacts are bundled in the WAR file though.

    Comment by Arun Gupta — November 4, 2007 @ 3:39 pm

  5. Great example!

    I need to be able "runtime" to choose wsit config file. One way would be to have multiple "WEB-INF/..xml" and add exactly one of them to the jvm classpath.

    A dream scenario would be if I could do this programmatically at startup, like WSITEnginde.setConfig("mywsit.xml"). It might be possible when looking at the PolicyConfigParser.java ..

    Comment by Rickard Lundin — February 13, 2008 @ 6:06 am

  6. Rickard, it would be easier to discuss your scenario on the mailing list users@metro.dev.java.net: https://metro.dev.java.net/servlets/ProjectMailingListList

    You are having at least two options, both of which are a bit lengthy to explain. I am working on a blog entry right now and will have that ready and published by Monday at the latest. I will keep you posted.

    Tjenare, Fabian

    Comment by Fabian Ritzmann — February 14, 2008 @ 6:22 am

  7. Rickard, I am discussing the options you are having here: http://blogs.sun.com/ritzmann/entry/non_standard_wsit_configuration_file

    Comment by Fabian Ritzmann — February 18, 2008 @ 8:30 am

  8. <html>
    <body>
    Hi, I have a problem of accessing web service methods, I have user name and password and I am using netbeans 6 but I don’t know how to use them. I developing web service client. Server have been developed by other programmer they just given me wsdl file only.
    I always I get this kind of exception

    javax.xml.ws.soap.SOAPFaultException: WSDoAllReceiver: Request does not contain required Security header
    at com.sun.xml.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:187)
    at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:116)
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:254)
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:224)
    at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:117)
    </body>
    </html>

    Comment by Ali — April 18, 2008 @ 12:46 pm

  9. Hi, I have a problem of accessing web service methods, I have user name and password and I am using netbeans 6 but I don’t know how to use them. I developing web service client. Server have been developed by other programmer they just given me wsdl file only.

    Comment by BATTERY — November 27, 2008 @ 4:54 pm

RSS feed for comments on this post. TrackBack URL

Leave a comment

The views expressed on this blog are my own and do not necessarily reflect the views of Oracle.
Powered by WordPress