Re[2]: please, help with "no deserializer found ..." message
Vladimir Brezhnev <[email protected]>
| Newsgroups | gmane.text.xml.soap.user |
|---|---|
| Organization | Portal |
| Message-ID | <[email protected]> |
Hello Scott,
Tuesday, November 9, 2004, 4:36:15 PM, you wrote:
SN> When a service uses the RPC API, the SOAP request is parsed
SN> into parameters for the service method call. Each parameter has a
SN> Java type specified by the method signature. Apache SOAP normally
SN> uses the XML Schema type of an element in the request to determine
SN> the Java type of the parameter using a type map defined in the
SN> Apache SOAP code, but which the programmer can also extend. In
SN> your case, the parameters do not have an XML Schema type
SN> specified, so Apache SOAP uses the element name instead. However,
SN> you have not specified a mapping for this type. For the service,
SN> Apache SOAP type mapping are specified in the deployment
SN> descriptor.
SN> The Apache SOAP 2.3.1 documentation for type mapping is at
SN> http://ws.apache.org/soap/docs/guide/serializer.html.
I specify type mappings in a deployment descriptor.
But i get now this error:
"
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring>Exception while handling service request: com.ericsson.services.mms.sdk.vasp.samples.sim.MMCRelay.SubmitReq(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,javax.activation.DataHandler) -- no signature match</faultstring>
<faultactor>/vaspsubmit/servlet/rpcrouter</faultactor>
<detail>
<stackTrace>java.lang.NoSuchMethodException: com.ericsson.services.mms.sdk.vasp.samples.sim.MMCRelay.SubmitReq(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,javax.activation.DataHandler) -- no signature match
at org.apache.soap.util.MethodUtils.getEntryPoint(MethodUtils.java:154)
[...skipped...]"
SOAP tries to call method with many java.lang.String parameters.
There is the deploy.xml:
<?xml version="1.0"?>
<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment"
id="http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-5-MM7-1-2"
>
<isd:provider type="java"
scope="Application"
methods="SubmitReq CancelReq">
<isd:java class="com.ericsson.services.mms.sdk.vasp.samples.sim.MMCRelay"
static="false"/>
</isd:provider>
<isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener>
<isd:mappings>
{skipped}
</isd:mappings>
</isd:service>
What i must change in the client code or in the deploy.xml to get success
answer? I could not change server code (MMCRelay).
There is a class, which was set in deploy.xml.
MMCRelay class:
package com.ericsson.services.mms.sdk.vasp.samples.sim;
import com.ericsson.services.mms.sdk.vasp.api.*;
import java.io.*;
import java.util.*;
import javax.mail.MessagingException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.soap.*;
import org.apache.soap.encoding.SOAPMappingRegistry;
import org.apache.soap.rpc.SOAPContext;
import org.w3c.dom.*;
// Referenced classes of package com.ericsson.services.mms.sdk.vasp.samples.sim:
// VASPSenderThread
public class MMCRelay
{
public MMCRelay()
{
}
private MultiMediaSubmitResponse MultiMediaSubmitProcess(MultiMediaApplication multimediaapplication, MultiMediaMessage multimediamessage)
throws SOAPException
{
String s = TransactionManager.genTransactionID();
MultiMediaSubmitResponse multimediasubmitresponse = null;
try
{
if(multimediamessage.getSubject() != null && multimediamessage.getSubject().length() > 32)
{
multimediasubmitresponse = new MultiMediaSubmitResponse(2001, "Subject Too Long");
throw new IllegalArgumentException();
}
Date date = new Date();
if(multimediamessage.getTimeofExpiry() == null && multimediamessage.getRelativeTimeofExpiry() != 0L)
multimediamessage.setTimeofExpiry(new Date(date.getTime() + 1000L * multimediamessage.getRelativeTimeofExpiry()));
if(multimediamessage.getTimeofExpiry() != null && date.after(multimediamessage.getTimeofExpiry()))
{
multimediasubmitresponse = new MultiMediaSubmitResponse(2002, "Invalid Expiry");
throw new IllegalArgumentException();
}
if(multimediamessage.getEarliestDeliveryTime() == null && multimediamessage.getRelativeEarliestDeliveryTime() != 0L)
multimediamessage.setEarliestDeliveryTime(new Date(date.getTime() + 1000L * multimediamessage.getRelativeEarliestDeliveryTime()));
if(multimediamessage.getEarliestDeliveryTime() != null && multimediamessage.getTimeofExpiry() != null && multimediamessage.getEarliestDeliveryTime().after(multimediamessage.getTimeofExpiry()))
{
multimediasubmitresponse = new MultiMediaSubmitResponse(2004, "Earliest Delivery clashed with Expiry");
throw new IllegalArgumentException();
}
if(multimediamessage.getFrom() != null && multimediamessage.getFrom().length() > 12)
{
multimediasubmitresponse = new MultiMediaSubmitResponse(2002, "Origination address error");
throw new IllegalArgumentException();
}
if(multimediamessage.getNumberDestinationAddress() > 10)
{
multimediasubmitresponse = new MultiMediaSubmitResponse(2002, "Invalid Number of Destinationsr");
throw new IllegalArgumentException();
}
multimediasubmitresponse = new MultiMediaSubmitResponse(s);
}
catch(IllegalArgumentException illegalargumentexception)
{
throw new SOAPException(Constants.FAULT_CODE_CLIENT, multimediasubmitresponse == null ? "Submit" : multimediasubmitresponse.getSubmitResultDescription());
}
if(multimediasubmitresponse != null && multimediasubmitresponse.isSuccess())
{
MultiMediaApplication multimediaapplication1 = new MultiMediaApplication();
ArrayList arraylist = new ArrayList();
arraylist.addAll(multimediamessage.getAllDestination());
for(int i = 0; i < arraylist.size(); i++)
{
Object obj = null;
Address address = (Address)arraylist.get(i);
if(multimediamessage.getDeliveryReport())
{
MultiMediaDeliveryReport multimediadeliveryreport = new MultiMediaDeliveryReport();
multimediadeliveryreport.setRecipient(address.toString());
multimediadeliveryreport.setFrom(multimediamessage.getFrom());
multimediadeliveryreport.setReportStatus("Delivered");
multimediadeliveryreport.setMessageID(multimediasubmitresponse.getMessageID());
multimediadeliveryreport.setReportTime(new Date());
VASPSenderThread vaspsenderthread = new VASPSenderThread(multimediamessage.getReportAddress(), multimediaapplication1, multimediadeliveryreport);
vaspsenderthread.start();
vaspsenderthread = null;
}
if(multimediamessage.getReadReport())
{
MultiMediaReadReport multimediareadreport = new MultiMediaReadReport();
multimediareadreport.setRecipient(address.toString());
multimediareadreport.setFrom(multimediamessage.getFrom());
multimediareadreport.setMessageID(multimediasubmitresponse.getMessageID());
multimediareadreport.setReportTime(new Date());
VASPSenderThread vaspsenderthread1 = new VASPSenderThread(multimediamessage.getReportAddress(), multimediaapplication1, multimediareadreport);
vaspsenderthread1.start();
vaspsenderthread1 = null;
}
}
}
return multimediasubmitresponse;
}
public void SubmitReq(Envelope envelope, SOAPContext soapcontext, SOAPContext soapcontext1)
throws SOAPException
{
System.out.println("SubmitReq Entered");
MultiMediaMessage multimediamessage = new MultiMediaMessage();
try
{
multimediamessage.unmarshall(envelope);
MultiMediaSubmitResponse multimediasubmitresponse = new MultiMediaSubmitResponse(1000, "Successfull message submission");
multimediasubmitresponse.setMessageID("1");
multimediasubmitresponse.setSubmitResultDescription("Successfull message submission");
multimediasubmitresponse.setTransactionId("12345");
multimediasubmitresponse.setTransactionID(multimediamessage.getTransactionId());
Envelope envelope1 = multimediasubmitresponse.marshall();
StringWriter stringwriter = new StringWriter();
envelope1.marshall(stringwriter, new SOAPMappingRegistry(), soapcontext1);
soapcontext1.setRootPart(stringwriter.toString(), "text/xml");
}
catch(Exception exception)
{
throw new SOAPException(Constants.FAULT_CODE_SERVER, exception.getMessage(), exception);
}
finally
{
System.out.println("SubmitReq Exited");
}
}
/**
* @deprecated Method MultiMediaSubmit is deprecated
*/
public void MultiMediaSubmit(Envelope envelope, SOAPContext soapcontext, SOAPContext soapcontext1)
throws SOAPException, MessagingException, IOException
{
System.out.println("MultiMediaSubmit Entered");
MultiMediaMessage multimediamessage = new MultiMediaMessage();
try
{
multimediamessage.unmarshall(envelope);
MultiMediaSubmitResponse multimediasubmitresponse = new MultiMediaSubmitResponse(1000, "Successfull message submission");
multimediasubmitresponse.setMessageID("1");
multimediasubmitresponse.setSubmitResultDescription("Successfull message submission");
multimediasubmitresponse.setTransactionId("12345");
multimediasubmitresponse.setTransactionID(multimediamessage.getTransactionId());
Envelope envelope1 = marshall(multimediasubmitresponse);
StringWriter stringwriter = new StringWriter();
envelope1.marshall(stringwriter, new SOAPMappingRegistry(), soapcontext1);
soapcontext1.setRootPart(stringwriter.toString(), "text/xml");
}
catch(Exception exception)
{
throw new SOAPException(Constants.FAULT_CODE_SERVER, exception.getMessage(), exception);
}
finally
{
System.out.println("MultiMediaSubmit Exited");
}
}
[some code skipped]
}
--
Best regards,
Vladimir