Hi,
I implemented an handler to read an object in the soap header.
The object sent in the header is present as a <beanMapping> in the
deployment file.
I get an "argument type mismatch" in the processing of the request, not
while decoding the header object itself (it gets created).
When I don't use getValueAsType everything works fine except that I need to
parse the object manually :-(
Can you help me ?
Here is the code :
public class TestHandler extends BasicHandler {
public static final String HEADER_NS = "urn:PositioningService";
public static final String HEADER_REQNAME = "ID";
public TestHandler() {
}
/**
* Process a MessageContext.
*/
public void invoke(MessageContext context) throws AxisFault
{
if (context.getPastPivot())
return;
// Request. look for the header
Message msg = context.getRequestMessage();
if (msg == null)
throw new AxisFault(JavaUtils.getMessage("noRequest00"));
SOAPEnvelope env = msg.getSOAPEnvelope();
// Get the header
SOAPHeaderElement header = env.getHeaderByName(HEADER_NS,
HEADER_REQNAME);
// process the header when it's not null
if (header != null) {
ID id = null;
try {
// constructs the object from the header
id = (ID)header.getValueAsType(new QName(HEADER_NS,
HEADER_REQNAME));
header.setProcessed(true);
} catch (Exception e) {
throw AxisFault.makeFault(e);
}
...
I get the following Exception :
- Exception:
java.lang.IllegalArgumentException: argument type mismatch
at org.apache.axis.AxisFault.makeFault(Unknown Source)
at org.apache.axis.providers.java.JavaProvider.invoke(Unknown
Source)
at org.apache.axis.strategies.InvocationStrategy.visit(Unknown
Source)
at org.apache.axis.SimpleChain.doVisiting(Unknown Source)
at org.apache.axis.SimpleChain.invoke(Unknown Source)
at org.apache.axis.server.AxisServer.invoke(Unknown Source)
at
org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:576)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:247)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:193)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:243)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
66)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:190)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
66)
at
org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:2
46)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
64)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2343)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180
)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
66)
at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.
java:170)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
64)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170
)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
64)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
64)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:174)
at
org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:5
66)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at
org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:
1012)
at
org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1107
)
at java.lang.Thread.run(Thread.java:536)
Caused by: java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39
)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.axis.providers.java.RPCProvider.processMessage(Unknown
Source)
... 38 more
Cordialement/Regards,
Antoine Martin - Automotive Projects Delivery Manager.
Webraska Mobile Technologies - 22, rue Guynemer - B.P 107 - 78602
Maisons-Laffitte Cedex (France)
Tel: +33 (0)1 39 12 88 47 - Fax : +33 (0)1 39 12 88 88