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