JMS Based Webservice on Weblogic Server

By default, client applications use HTTP/S as the connection protocol when invoking a WebLogic Web Service. You can, however, configure a WebLogic Web Service so that client applications can also use JMS as the transport when invoking the Web Service.When a WebLogic Web Service is configured to use JMS as the connection transport:The generated WSDL of the Web Service contains two port definitions: one with an HTTP/S binding and one with a JMS binding. When you invoke the Web Service in your client application, you can choose which port, and thus which type of transport, you want to use.Warning:     Non-WebLogic client applications, such as a .NET client, will not be able to invoke the Web Service using the JMS binding.The clientgen Ant task creates a Service implementation that contains two getPortXXX() methods, one for HTTP/S and one for JMS.Note:    You can configure any WebLogic Web Service to include a JMS binding in its WSDL. This feature is independent of JMS-implemented WebLogic Web Services.

Read more

Step1 :-

Create JMS Server and target it to the AdminServer running on http://localhost:7001Create a ConnectionFactory and a Queue targeted to the JMSServer.For Screenshots follow this article.
Step2 :- Create a JWS File

package demo;
import weblogic.jws.*;

import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.soap.SOAPBinding;

@WebService(name=”HelloWorldPortType”,serviceName=”HelloWorldService”,      targetNamespace=”http://www.bea.com”)
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,use=SOAPBinding.Use.LITERAL,           parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)

@WLJmsTransport(serviceUri=”HelloWorldService”,portName=”HelloWorldServicePort”,                    contextPath=”HelloWorldService”,connectionFactory=”ConnectionFactory-0″,queue=”Queue-0″)

public class HelloWorldImpl {
@WebMethod()
public String sayHello(String s) {
return “Hello ” + s;
}
}

Step 3:- Create a Client

package demo;
import demo.HelloWorldService;
import demo.HelloWorldService_Impl;
import demo.HelloWorldPortType;
import weblogic.wsee.jaxrpc.WLStub;
import java.util.ArrayList;
import java.util.List;
import javax.xml.rpc.Stub;

public class HelloWorldClient
{
public static void main(String[] args) throws Throwable {

String wsdl = args[0];
HelloWorldService service = new HelloWorldService_Impl(wsdl);
HelloWorldPortType port = service.getHelloWorldServicePort();
Stub stub = (Stub)port;
stub._setProperty(WLStub.JMS_TRANSPORT_JNDI_URL, “t3://localhost:7001”);
String response = port.sayHello(“World”);
System.out.println(“response = ” + response);
}
}

Step 4:- Create a build

<project name=”Sample JMS Webservice” default=”all” basedir=”.”>

<property name=”ws.file” value=”HelloWorldImpl” />
<property name=”ear.dir” value=”./ear” />
<property name=”client.dir” value=”./client” />

<path id=”client.class.path”>
<pathelement path=”${client.dir}”/>
<pathelement path=”${java.class.path}”/>
</path>

<taskdef name=”jwsc”
classname=”weblogic.wsee.tools.anttasks.JwscTask” />

<taskdef name=”clientgen”
classname=”weblogic.wsee.tools.anttasks.ClientGenTask” />

<target name=”all” depends=”clean,
server,
client,
deploy” />

<target name=”build” depends=”clean,
server,
client” />

<target name=”clean”>
<delete dir=”${ear.dir}”/>
<delete dir=”${client.dir}”/>
</target>

<target name=”server”>
<mkdir dir=”${ear.dir}”/>
<jwsc
srcdir=”${basedir}”
destdir=”${ear.dir}”
classpath=”${java.class.path}”
fork=”true”
keepGenerated=”true”
deprecation=”${deprecation}”
debug=”${debug}”
verbose=”false”>
<jws file=”${ws.file}.java” explode=”true”/>
</jwsc>
</target>

<target name=”deploy”>
<wldeploy action=”deploy”
source=”${ear.dir}” user=”weblogic”
password=”weblogic” verbose=”true”
failonerror=”${failondeploy}”
adminurl=”t3://localhost:7001″
targets=”AdminServer” />
</target>

<target name=”client”>
<mkdir dir=”${client.dir}”/>
<clientgen
wsdl=”${ear.dir}/${ws.file}/WEB-INF/HelloWorldService.wsdl”
destDir=”${client.dir}”
classpath=”${java.class.path}”
packageName=”demo”/>
<javac
srcdir=”${client.dir}” destdir=”${client.dir}”
classpath=”${java.class.path}”
includes=”demo/**/*.java”/>
<javac
srcdir=”${basedir}” destdir=”${client.dir}”
classpath=”${java.class.path};${client.dir}”
includes=”HelloWorldClient.java”/>
</target>

<target name=”run” >
<java fork=”true”
classname=”demo.HelloWorldClient”
failonerror=”true” >
<classpath refid=”client.class.path”/>
<arg line=”http://localhost:7001/HelloWorldService/HelloWorldService?WSDL” />
</java>
</target>

</project>

Step 5:- Create a folder and keep the source files and the build.xml in that directory. Also copy the setWLSEnv.cmd from WL_HOMEbin to this folder. Create two folders in this folder, ear and client.

Step 6 :- Set the Environment

D:Replicationsjmswebservice>setWLSEnv.cmd

Step 7:- Create the Webservice Ear

D:Replicationsjmswebservice>ant server
Buildfile: build.xml

server:
[jwsc] JWS: processing module /HelloWorldImpl
[jwsc] Parsing source files
[jwsc] Parsing source files
[jwsc] 1 JWS files being processed for module /HelloWorldImpl
[jwsc] JWS: D:ReplicationsjmswebserviceHelloWorldImpl.java Validated.
[jwsc] Since compiler setting isn’t classic or modern,ignoring fork setting
.
[jwsc] Compiling 2 source files to C:UserskhanfAppDataLocalTemp_bxr00
h
[jwsc] Since compiler setting isn’t classic or modern,ignoring fork setting
.
[jwsc] Copying 1 file to D:ReplicationsjmswebserviceearHelloWorldImplW
EB-INF
[jwsc] Copying 22 files to D:ReplicationsjmswebserviceearHelloWorldImpl
WEB-INF
[jwsc] Copying 2 files to D:ReplicationsjmswebserviceearHelloWorldImpl
WEB-INFclasses
[jwsc] Copying 1 file to D:ReplicationsjmswebserviceearHelloWorldImpl
[jwsc] [EarFile] Application File : D:ReplicationsjmswebserviceearMETA-
INFapplication.xml
[AntUtil.deleteDir] Deleting directory C:UserskhanfAppDataLocalTemp_bxr00h

BUILD SUCCESSFUL
Total time: 16 seconds

Step 8:- Deploy the Ear

D:Replicationsjmswebservice>ant deploy
Buildfile: build.xml

deploy:
[wldeploy] weblogic.Deployer -verbose -noexit -source D:Replicationsjmswebser
viceear -targets AdminServer -adminurl t3://localhost:7001 -user weblogic -pass
word ******** -deploy
[wldeploy] weblogic.Deployer invoked with options: -verbose -noexit -source D:
Replicationsjmswebserviceear -targets AdminServer -adminurl t3://localhost:70
01 -user weblogic -deploy
[wldeploy] <Apr 30, 2011 2:06:34 PM IST> <Info> <J2EE Deployment SPI> <BEA-2601
21> <Initiating deploy operation for application, ear [archive: D:Replications
jmswebserviceear], to AdminServer .>
[wldeploy] Task 3 initiated: [Deployer:149026]deploy application ear on AdminSe
rver.
[wldeploy] Task 3 completed: [Deployer:149026]deploy application ear on AdminSe
rver.
[wldeploy] Target state: deploy completed on Server AdminServer
[wldeploy]
[wldeploy] Target Assignments:
[wldeploy] + ear AdminServer

BUILD SUCCESSFUL

Step 9 :- Compile the client

D:Replicationsjmswebservice>ant client
Buildfile: build.xml

client:
[clientgen] Ignoring JAX-WS options – building a JAX-RPC client
[clientgen]
[clientgen] *********** jax-rpc clientgen attribute settings ***************
[clientgen]
[clientgen] wsdlURI: file:/D:/Replications/jmswebservice/ear/HelloWorldImpl/WEB-
INF/HelloWorldService.wsdl
[clientgen] serviceName : null
[clientgen] packageName : demo
[clientgen] destDir : D:Replicationsjmswebserviceclient
[clientgen] handlerChainFile : null
[clientgen] generatePolicyMethods : false
[clientgen] autoDetectWrapped : true
[clientgen] jaxRPCWrappedArrayStyle : true
[clientgen] generateAsyncMethods : true
[clientgen]
[clientgen] *********** jax-rpc clientgen attribute settings end ***************

[clientgen] Package name is demo
[clientgen] DestDir is D:Replicationsjmswebserviceclient
[clientgen] class name is HelloWorldPortType_Stub
[clientgen] service class name is HelloWorldService
[clientgen] Porttype name is HelloWorldPortType
[clientgen] service impl name is HelloWorldService_Impl
[javac] Compiling 4 source files to D:Replicationsjmswebserviceclient
[javac] Note: D:ReplicationsjmswebserviceclientdemoHelloWorldPortType_S
tub.java uses unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
[javac] Compiling 1 source file to D:Replicationsjmswebserviceclient

BUILD SUCCESSFUL

Step 10:- Run the Client

D:Replicationsjmswebservice>ant run
Buildfile: build.xml

run:
[java] response = Hello World

BUILD SUCCESSFUL
Total time: 10 seconds

If you have a look at the WSDL

http://localhost:7001/HelloWorldService/HelloWorldService?WSDL

The service will look like this.

<s0:service name=”HelloWorldService”>
<s0:port binding=”s1:HelloWorldServiceSoapBinding” name=”HelloWorldServicePort”>
<s2:address location=”jms://192.168.3.8:7001/HelloWorldService/HelloWorldService?URI=Queue-0&FACTORY=ConnectionFactory-0″ />
</s0:port>
</s0:service>

Let me know if you face any issues while running this sample.

 

Download the source here : jmswebservice

4 comments

    1. Its the client directory and the java classpath.

      The classpath is set in step 6.

Comments are closed.