Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
1.4
-
None
-
None
Description
AxisOperationFactory.getAxisOperation(int mepURI) returns the wrong AxisOperation instance for the ROBUST_IN_ONLY MEP. The code returns an InOutAxisOperation from this:
case WSDLConstants.MEP_CONSTANT_ROBUST_IN_ONLY : {
abOpdesc = new InOutAxisOperation();
abOpdesc.setMessageExchangePattern(WSDL2Constants.MEP_URI_ROBUST_IN_ONLY);
break;
}
There should be a coresponding RobustInOnlyAxisOperation that it returns like this:
case WSDLConstants.MEP_CONSTANT_ROBUST_IN_ONLY : {
abOpdesc = new RobustInOnlyAxisOperation();
abOpdesc.setMessageExchangePattern(WSDL2Constants.MEP_URI_ROBUST_IN_ONLY);
break;
}
This causes issues because it adds an out AxisMessage to the operation and also generates an <output> in the WSDL operations. This in-turn causes other code to think that it's a Request-Response style service and you get exceptions when no response comes back, like "The input stream for an incoming message is null".
On the same note, AxisOperationFactory.getAxisOperationDescription(String mepURI) also needs to be fixed for Robust-Out-Only and Robust-In-Only MEPs
else if (WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY.equals(mepURI) ||
WSDL20_2006Constants.MEP_URI_ROBUST_OUT_ONLY.equals(mepURI) ||
WSDL20_2004_Constants.MEP_URI_ROBUST_OUT_ONLY.equals(mepURI)) {
abOpdesc = new RobustOutOnlyAxisOperation();
abOpdesc.setMessageExchangePattern(WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY);
} else if (WSDL2Constants.MEP_URI_ROBUST_IN_ONLY.equals(mepURI) ||
WSDL20_2006Constants.MEP_URI_ROBUST_IN_ONLY.equals(mepURI) ||
WSDL20_2004_Constants.MEP_URI_ROBUST_IN_ONLY.equals(mepURI)) {
abOpdesc = new RobustInOnlyAxisOperation();
abOpdesc.setMessageExchangePattern(WSDL2Constants.MEP_URI_ROBUST_IN_ONLY);
}
If a new RobustInOnlyAxisOperation is unnecessary for some reason, then at least the AxisOperationFactory.getAxisOperationDescription(String mepURI) method should be made consistent and the check for the ROBUST_IN_ONLY MEP should return an instance of InOutAxisOperation, the same way that AxisOperationFactory.getAxisOperation(int mepURI) does.