小妹急秋双维数组在SOAP中的传输问题的解答
如果是一维的数组,就没有问题,但是如果将程序改成双维的,就报错如下
Caught SOAPException (SOAP-ENV:Client): No mapping found for 'http://schemas.xmlsoap.org/soap/encoding/:Array' using encoding style 'http://schemas.xmlsoap.org/soap/encoding/'.
单维数组其实在DeploymentDescriptor.xml里不需要任何的mapping,但是多维的呢?如果需要怎写阿?拜托各位高手大哥门救命
下面的程序是可以运行的一维叔祖的,//的部分是2维数组的程序
package samples.talk;
import java.util.*;
import java.lang.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import org.apache.soap.util.xml.*;
public class Talk{
public String st1= "How are you";
public String st2= "Bye";
//Object[][] r=new Object[2][2];
Object[] r=new Object[2];
public Object[]getResponseFromRequest(String req) throws IllegalArgumentException{
// public Object[][]getResponseFromRequest(Strig req) throws
//IllegalArgumentException{
if (req == null)
{
throw new IllegalArgumentException("Say something");
}
if (req.equals(st1)){
r[0]="Fine, thank you";
r[1]="and you";
// r[0][0]="Fine, thank you";
// r[0][1]="and you";
// r[1][0]="Fine, thank you";
// r[1][1]="and you";
}
else if(req.equals(st2)){
r[0]="see you";
r[1]="88";
//r[0][0]="see you";
//r[0][1]="88";
//r[1][0]="see you";
//r[1][1]="88";
}
return r;
}
}
package samples.talk;
import java.io.*;
import java.util.*;
import java.lang.*;
import java.net.*;
import org.w3c.dom.*;
import org.apache.soap.util.xml.*;
import org.apache.soap.*;
import org.apache.soap.encoding.*;
import org.apache.soap.encoding.soapenc.*;
import org.apache.soap.rpc.*;
public class GetResponse
{
public static void main(String[] args) throws Exception
{
URL url = new URL(args[0]);
String req = args[1];
SOAPMappingRegistry smr = new SOAPMappingRegistry();
BeanSerializer beanSer = new BeanSerializer();
Call call = new Call();
call.setSOAPMappingRegistry(smr);
call.setTargetObjectURI("urn:Conversation");
call.setMethodName("getResponseFromRequest");
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
Vector params = new Vector();
params.addElement(new Parameter("req", String.class,
req, null));
call.setParams(params);
Response resp;
try
{
resp = call.invoke(url, "");
}
catch (SOAPException e)
{
System.err.println("Caught SOAPException (" +
e.getFaultCode() + "): " +
e.getMessage());
return;
}
// Check the response.
if (!resp.generatedFault())
{
Parameter ret = resp.getReturnValue();
Object[]value = (Object[])ret.getValue();
//Object[][]value = (Object[][])ret.getValue();
System.out.println("\n" + "you say: "+ req);
System.out.println("\n" + "I response: ");
System.out.println(value != null ? "\n" + value[0]+"\n"+value[1] : "I don't know.");
}
else
{
Fault fault = resp.getFault();
System.err.println("Generated fault: " + fault);
}
}
}