Hi Mike-
in the server-config.wsdd.. look for attribute dotNotSoapEncFix and set to true
<parameter name="dotNetSoapEncFix" value="true"/>
Also ..any element declaration defining a boolean type should be of type
xsd:boolean
<xsd:element name="RetVal" type="xsd:boolean"/>
Does this help?
Martin--
This email message and any files transmitted with it contain confidential
information intended only for the person(s) to whom this email message is
addressed. If you have received this email message in error, please notify
the sender immediately by telephone or email and destroy the original
message without making a copy. Thank you.
----- Original Message -----
From: Bauer, Michael
To: [email protected]
Sent: Thursday, May 24, 2007 12:26 PM
Subject: java.lang.IllegalArgumentException with Document/Literal...help
please
To all:
I am stressing about this exception I am getting. We have a web service,
deployed on JBoss 4.2.5 using Axis 1.4. We were using the default style, but
recently we gained a requirement to support .NET as a consumer of this WS. The
people writing the .NET code reported back to me that they could not use their
auto-generation tools to generate their code from our WSDL. Through some
digging, I uncovered that .NET does not support RDP:SOAP style, and only
supports Document:Literal. So, I changed the style to "document" and
everything seemed fine.
Now, the users of the service are saying they are getting errors when they
actually call the web service. I had written some test client code that used
stubs generated from WSDL2Java, and hadn't updated since changing to
Document:Literal style, so I decided to get it to work again. Low and behold,
if I call one of the no-argument methods, the call works fine, but as soon as I
call any of the methods that have >1 argument, the code explodes with the
following:
************** Exception Output **************
2007-05-24 11:02:06,945 INFO [org.apache.axis.providers.java.RPCProvider]
Tried to invoke method public long
com.bofa.esm.selfservice.SelfServiceImpl.distributeSelfService(java.lang.String,java.lang.String,java.lang.String,boolean)
throws java.lang.Exception with arguments java.lang.String,null,null,null.
The arguments do not match the signature.
java.lang.IllegalArgumentException
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:585)
at
org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
at
org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
at
org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
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.handlers.soap.SOAPService.invoke(SOAPService.java:453)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
at
org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at
org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilterjava:96)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValvejava:213)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValvejava:178)
at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524)
at
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at
org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
at
org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:392)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at
org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Thread.java:595)
************ End Exception Output *************
The interesting part is that the request contains all the required
parameters, hence they are not null:
************** XML Request ****************** <?xml version="1.0"
encoding="UTF-8"?> <soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<name xmlns="SelfService">mif_creator</name>
<userId xmlns="SelfService">nbtcia7</userId>
<epLabel xmlns="SelfService">ESMDEV_RTXT1</epLabel>
<processPrereqs xmlns="SelfService">false</processPrereqs>
</soapenv:Body>
</soapenv:Envelope>
************ End XML Request ****************
Here are the relevant bits of code:
************ Working method *****************
public String[] getAvailableSelfServiceTargets() throws Exception {
Collection<SelfServiceVO> c = selfServiceDao.getAll();
String[] ret = new String[c.size()];
try {
int i = 0;
for (SelfServiceVO val : c) {
ret[i++] = val.getMapName();
}
} catch (Exception e) {
logger.error("An error occured.", e);
throw e;
}
return ret;
}
********** End Working method ***************
************ Broken method *****************
public long distributeSelfService(String name, String userId, String
epLabel, boolean processPrereqs ) throws Exception {
try {
return
selfServiceUtility.distributeMapping(name,epLabel,processPrereqs,userId);
} catch(Exception e) {
logger.error("An error occured.",e);
throw e;
}
}
********** End Broken method ***************
************ WSDD snippet *****************
<service name="SelfService" provider="java:RPC" style="document">
<parameter name="className"
value="com.bofa.esm.selfservice.SelfServiceImpl" />
<parameter name="allowedMethods"
value="getAvailableSelfServiceTargets,distributeSelfService,getSelfServiceStatusMessage"
/>
<namespace>SelfService</namespace>
</service>
********** End WSDD Snippet ***************
Thanks in advance for any assistance anyone can give me.
Mike Bauer