WSDoAllReceiver crashes due to missing method in SOAPHeaderElement
------------------------------------------------------------------
Key: WSS-12
URL: http://issues.apache.org/jira/browse/WSS-12
Project: WSS4J
Type: Bug
Environment: Windows XP SP2, SUN JDK 1.5.0, Axis 1.2.1, WSS4J 1.0.0
Reporter: Guy Rixon
Assigned to: Davanum Srinivas
Priority: Critical
I am using WSDoAllReceiver to process message signature. It consistently
crashes when reading the message with this error:
javax.xml.soap.SOAPHeaderElement.getLocalName()Ljava/lang/String;
java.lang.NoSuchMethodError:
javax.xml.soap.SOAPHeaderElement.getLocalName()Ljava/lang/String;
at
org.apache.ws.axis.security.WSDoAllReceiver.invoke(WSDoAllReceiver.java:270)
at
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:121)
at org.apache.axis.client.Call.invokeEngine(Call.java:2765)
at org.apache.axis.client.Call.invoke(Call.java:2748)
at org.apache.axis.client.Call.invoke(Call.java:2424)
at org.apache.axis.client.Call.invoke(Call.java:2347)
at org.apache.axis.client.Call.invoke(Call.java:1804)
at
org.astrogrid.security.sample.SamplePortSoapBindingStub.whoAmI(SamplePortSoapBindingStub.java:108)
at org.astrogrid.security.EndToEndTest.testAll(EndToEndTest.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
The method in question is specified by org.w3c.dom.Element; it looks like the
inheritence tree has gone wrong in Axis 1.2.1. The inheritence of interfaces
between javax.xml.soap.SOAPHeaderInterface, javax.xml.soap.SOAPElement and
org.w3c.dom.Node may be the problem; it looks to me like there may be a loop.
This problem can be worked around in WSS4J by changing WSDoAllReceiver. Around
line 269, change this
SOAPHeaderElement headerElement = null;
while (headers.hasNext()) {
SOAPHeaderElement hE = (SOAPHeaderElement)headers.next();
if (hE.getLocalName().equals(WSConstants.WSSE_LN)
&& hE.getNamespaceURI().equals(WSConstants.WSSE_NS)) {
headerElement = hE;
break;
}
}
((org.apache.axis.message.SOAPHeaderElement) headerElement)
.setProcessed(true);
to this
SOAPHeaderElement headerElement = null;
while (headers.hasNext()) {
org.apache.axis.message.SOAPHeaderElement hE =
(org.apache.axis.message.SOAPHeaderElement) headers.next();
if (hE.getLocalName().equals(WSConstants.WSSE_LN)
&& hE.getNamespaceURI().equals(WSConstants.WSSE_NS)) {
headerElement = hE;
break;
}
}
((org.apache.axis.message.SOAPHeaderElement) headerElement)
.setProcessed(true);
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]