日期:2014-05-17  浏览次数:20705 次

调用web服务,得到返回值[Ljava.lang.String,但数组内无内容,为什么呢?
我用axis2调用网上的服务,使用的是invokeBlocking方法:
response=serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes);
然后用System.out.println((String[])response[0]+"nihao");输出,得到的结果是[Ljava.lang.String;@d9edbenihao

这说明这个数组内是有值的吧?

可是当我想要具体地取出数组当中的值时:
String[] strArray=(String[])response;
for(int i=0;i<strArray.length;i++){

System.out.println(strArray[i]);

}

不显示了。什么都没有。查了下strArray的长度,是1 ,跟实际的不相符。

我调用的是http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?WSDL中的getRegionProvince服务,没有输入参数,返回一个一维字符串数组。

难道是java调用.net服务的问题?还是别的原因??

这个问题困扰我好久了。求助啊!谢谢!!
------解决方案--------------------
如果用axis2,应该是这样调用的。

String soapBindingAddress = "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?WSDL";
ServiceClient sender = new ServiceClient();
EndpointReference endpointReference = new EndpointReference(
soapBindingAddress);
Options options = new Options();
options.setAction("http://WebXml.com.cn/getRegionProvince");
options.setTo(endpointReference);
sender.setOptions(options);
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace("http://WebXml.com.cn/",
"getRegionProvince");
OMElement data = fac.createOMElement("getRegionProvince", omNs);
OMElement ele = sender.sendReceive(data);
System.out.println(ele.toString());

------解决方案--------------------
[Ljava.lang.String;@d9edbenihao

是有数组对象,而非数组中有值
------解决方案--------------------
RPCServiceClient应该是这样的。


RPCServiceClient client = new RPCServiceClient();
Options options = client.getOptions();
EndpointReference target = new EndpointReference(
"http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?WSDL");
options.setTo(target);
options.setAction("http://WebXml.com.cn/getRegionProvince");
QName opName = new QName("http://WebXml.com.cn/", "getRegionProvince");
OMElement response = client.invokeBlocking(opName, new Object[] {});
System.out.println(response);

------解决方案--------------------
axis 1的 看看
String url = "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx";
String nameSpace = "http://WebXml.com.cn/";
String method = "getRegionProvince";
Service service = new Service();
Call call;
call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(url));
call.setOperationName(new QName(nameSpace, method));
call.setUseSOAPAction(true);
call.setSOAPActionURI(nameSpace + method);
call.setReturnClass(String[].class); 
String[] res = (String[]) call.invoke(new Object[] { });
for (String string : res) {
System.out.println(string);
}