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
Nice post faisal!! Keep up the good work.
thanks mate!
Hi,
wat is the value of “java.class.path”?
Its the client directory and the java classpath.
The classpath is set in step 6.