Hi all,
I am trying to invoke a simple web service.
public class SimpleTestVoid
{
public void printMessage() throws Exception
{
System.out.println( "Hello world" );
}
}
The WSDL is generated fine. Generated the client. But when invoking the
service, I am getting an exception.
java.lang.UnsupportedOperationException: An access occurred that is not
valid.
at
org.apache.axis2.description.InOnlyAxisOperation.getMessage(InOnlyAxisOperation.java:117)
at
org.apache.axis2.util.MessageContextBuilder.createOutMessageContext(MessageContextBuilder.java:183)
at
org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:37)
at
org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:114)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:173)
at
org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:167)
at
org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:142)
I debugged some part of the code.
When the service is deployed, according to the signature of the method, *it
is creating a InOnlyAxisOperation with "robust-in-only" as the message
exchange pattern*( it is not taking any input params and throwing an
exception).
*org.apache.axis2.deployment.util.UtilsgetAxisOperationForJmethod()*
if ("void".equals(method.getReturnType().getName())) {
if (method.getExceptionTypes().length > 0) {
*operation = AxisOperationFactory
.getAxisOperation(WSDLConstants.MEP_CONSTANT_ROBUST_IN_ONLY);*
} else {
operation = AxisOperationFactory
.getAxisOperation(WSDLConstants.MEP_CONSTANT_IN_ONLY);
}
If MEP_CONSTANT_IN_ONLY message exchange pattern is used, then all works
fine. But if there a method which does not take any input parameters and
throws some exception, then this issue comes.
*org.apache.axis2.description.AxisOperationFactory.getAxisOperation(int
mepURI)*
case WSDLConstants.MEP_CONSTANT_ROBUST_IN_ONLY : {
*abOpdesc = new InOnlyAxisOperation();
abOpdesc.setMessageExchangePattern(WSDL2Constants.MEP_URI_ROBUST_IN_ONLY);*
break;
So when the invoking the method using a client, in
*org.apache.axis2.util.MessageContextBuilder.createOutMessageContext(MessageContext
inMessageContext)*
if (ao != null){
newmsgCtx.setAxisMessage(*
ao.getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE)*);
}
Since a0 is a *org.apache.axis2.description.InOnlyAxisOperation*, the
following getMessage is invoked, so it is throwing this
UnsupportedOperationException.
public AxisMessage getMessage(String label) {
if (WSDLConstants.MESSAGE_LABEL_IN_VALUE.equals(label)) {
return (AxisMessage) getChild("inMessage");
} else {
*throw new
UnsupportedOperationException(Messages.getMessage("invalidacess"));*
}
}
If any more info is required please let me know. Hoping for a response..
Please.. I need help with this one...
Thanks,
Paul