Native WS-Reliable Messaging Error - The RM Destination requ
kerryrward Aug 27, 2008 8:35 PMI am trying to implement a web service that does both MTOM-XOP and reliable messaging. I have the service running with MTOM-XOP and patterned it after the MTOMEndPoint EJB3 example provided in the jboss native ws 3.0.2. I am running JBoss 4.2.2.
I then tried to implement the steps from the Reliable Messaging Tutorial at
http://jbws.dyndns.org/mediawiki/index.php?title=Native_WS-ReliableMessaging_Tutorial
I had problems with the wsdl I modified, so I added the following annotations to the endpoint and let JBOSS build the wsdl instead
@WebService(
name = "EflexServiceEndpoint",
serviceName = "EflexService",
endpointInterface = "com.eflex.webservice.EflexServiceEndpoint"
// wsdlLocation = "WEB-INF/wsdl/EflexService.wsdl"
)
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@BindingType(value = "http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true")
@EndpointConfig
(
configFile = "META-INF/wsrm-jaxws-endpoint-config.xml",
configName = "Standard WSRM Endpoint"
)
@PolicyAttachment(@Policy(
policyFileLocation = "META-INF/wsrm-exactly-once-in-order-policy.xml",
scope = PolicyScopeLevel.WSDL_BINDING)
)
public class EflexServiceEndpointBean implements EflexServiceEndpoint
{
Here is the exception I get:
org.jboss.ws.extensions.wsrm.RMFault: The RM Destination requires the use of WSRM
at org.jboss.ws.extensions.wsrm.server.RMInvocationHandler.prepareResponseContext(RMInvocationHandler.java:134)
at org.jboss.ws.extensions.wsrm.server.RMInvocationHandler.invoke(RMInvocationHandler.java:306)
at org.jboss.ws.core.server.ServiceEndpointInvoker.invoke(ServiceEndpointInvoker.java:221)
at org.jboss.wsf.stack.jbws.RequestHandlerImpl.processRequest(RequestHandlerImpl.java:466)
at org.jboss.wsf.stack.jbws.RequestHandlerImpl.handleRequest(RequestHandlerImpl.java:284)
at org.jboss.wsf.stack.jbws.RequestHandlerImpl.doPost(RequestHandlerImpl.java:201)
at org.jboss.wsf.stack.jbws.RequestHandlerImpl.handleHttpRequest(RequestHandlerImpl.java:134)
at org.jboss.wsf.stack.jbws.EndpointServlet.service(EndpointServlet.java:84)
Which seems to say that my service is expecting WSRM, but that the client has not implemented it.
Here is my client code.
public final class EflexServiceClient
{
private static final String serviceURL = "http://localhost:80/wseflex/EflexService";
public static void main(String[] args) throws Exception
{
InputStream is = null;
if (args.length != 0)
{
is = new FileInputStream(args[0]);
} else {
is = new ByteArrayInputStream("<test>reqest</test>".getBytes());
}
QName serviceName = new QName("http://webservice.eflex.com/", "EflexService");
URL wsdlURL = new URL(serviceURL + "?wsdl");
Service service = Service.create(wsdlURL, serviceName);
EflexServiceEndpoint port = (EflexServiceEndpoint)service.getPort(EflexServiceEndpoint.class);
SOAPBinding binding = (SOAPBinding)((BindingProvider)port).getBinding();
binding.setMTOMEnabled(true);
((StubExt)port).setConfigName("Standard Anonymous WSRM Client", "META-INF/wsrm-jaxws-client-config.xml");
Source src = new StreamSource(is);
SourceRequest request = new SourceRequest();
request.setData(src);
SourceResponse response = port.echoSource(request);
Source respSource = response.getData();
((RMProvider)port).closeSequence();
...
Any help on this is greatly appreciated. Thanks.