[jboss-user] [JBoss Web Services] - Dynamic webservice call with dispatch client using reliable messaging example
Patrik Jetzer
do-not-reply at jboss.com
Wed Nov 10 04:35:35 EST 2010
Patrik Jetzer [http://community.jboss.org/people/patrik.jetzer] created the discussion
"Dynamic webservice call with dispatch client using reliable messaging example"
To view the discussion, visit: http://community.jboss.org/message/570436#570436
--------------------------------------------------------------
I'm having difficulties to find examples about adding reliable messaging functionality to the webservice client code.
The Dispatch Client is used to dynamically calling the webservice(s)
This is the way the webservice is called tried to access an example reliable messaging enabled webservice deployed on localhost:
import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;
import javax.xml.ws.WebServiceException;
import javax.xml.ws.soap.SOAPBinding;
// -------------
public void sendRM() {
// String wsdlLocationString = " http://localhost:8080/SimpleWS/SimpleService?wsdl http://localhost:8080/SimpleWS/SimpleService?wsdl";
String namespace = " http://ws.example.com/ http://ws.example.com/";
String serviceName = "SimpleService";
String portName = "SimpleServicePort";
String methodName = "echoRequest";
try {
// Qnames for service as defined in wsdl.
QName serviceQName = new QName(namespace, serviceName);
// QName for Port As defined in wsdl.
QName portQName = new QName(namespace, portName);
// Endpoint Address
String endpointAddress = " http://localhost:8080/SimpleWS/SimpleService http://localhost:8080/SimpleWS/SimpleService";
// Create a dynamic Service instance
Service service = Service.create(serviceQName);
// Add a port to the Service
service.addPort(portQName, SOAPBinding.SOAP11HTTP_BINDING,
endpointAddress);
// Create a dispatch instance
Dispatch<SOAPMessage> dispatch = service.createDispatch(portQName,
SOAPMessage.class, Service.Mode.MESSAGE);
// Use Dispatch as BindingProvider
BindingProvider bp = (BindingProvider) dispatch;
// Optionally Configure RequestContext to send SOAPAction HTTP Header
Map<String, Object> rc = bp.getRequestContext();
rc.put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE);
rc.put(BindingProvider.SOAPACTION_URI_PROPERTY, methodName);
// Obtain a preconfigured SAAJ MessageFactory
MessageFactory factory = ((SOAPBinding) bp.getBinding()).getMessageFactory();
// Create SOAPMessage Request
SOAPMessage request = factory.createMessage();
// Request Header
SOAPHeader header = request.getSOAPHeader();
// Request Body
SOAPBody body = request.getSOAPBody();
// Compose the soap:Body payload
QName payloadName = new QName(namespace, methodName, "ns1");
SOAPBodyElement payload = body.addBodyElement(payloadName);
SOAPElement message = payload.addChildElement("input");
message.addTextNode("dummyHelloWorld");
// Invoke the endpoint synchronously
SOAPMessage reply = null;
try {
// Invoke Endpoint Operation and read response
reply = dispatch.invoke(request);
((Closeable) dispatch).close();
} catch (WebServiceException wse) {
wse.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
The dump of the soap messages show me that the reliable messaging messages are not produced.
when .invoke() method is called a
"javax.xml.ws.soap.SOAPFaultException: A required header representing a Message Addressing Property is not present"
is produced.
Env Setting:
JBossAS 4.2.2 JRE 1.6.0_20
Webservice stack jbossws-metro-3.0.5.GA
Does anybody have an example of dynamically calling a webservice with reliable messaging enabled?
Is there a link i have missed with one of my google searches?
Is there another approach i can use instead of using client Dispatch class?
I have to use the dynamical approach because i can't use the generated client artefacts produced by wsconsume/ wsimport,
since at design time it is not defined what services will be used to callback.
any help is welcomed
--------------------------------------------------------------
Reply to this message by going to Community
[http://community.jboss.org/message/570436#570436]
Start a new discussion in JBoss Web Services at Community
[http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2044]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jboss-user/attachments/20101110/e9e72f3e/attachment.html
More information about the jboss-user
mailing list