webservice调用时怎么传参数

<?xml version="1.0" encoding="UTF-8"?>

-

-

-xsd:schema

/xsd:schema

-

-

-

-

-

-

-

-

-

-

下面是我的调用代码:

 Service service = new Service();
        Call call = (Call) service.createCall();
        String url = "http://192.1.1.64:8082/Service/ServiceHello?wsdl";
        call.setTargetEndpointAddress(url);
        call.setOperationName(new QName("http://webservice_302/", "getValue"));
        call.addParameter(new QName("http://webservice_302/", "name"), org.apache.axis.encoding.XMLType.XSD_STRING,
                javax.xml.rpc.ParameterMode.IN);
        call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
        String result = (String) call.invoke(new String[] { "11" });
        System.out.println(result);

下面是接口的方法点:

 public String getValue(String name){
        return "欢迎你! "+name;
    }

可以成功调用,返回结果是:欢迎你! null

说明参数没有传进去,请问这里我应该怎么写呢?

5个回答

入参类型应该是org.apache.axis.Constants.XSD_STRING,不认为是org.apache.axis.encoding.XMLType.XSD_STRING

zhao5243
深爱甜蜜 额,点采纳点错了。
大约 2 年之前 回复
zhao5243
深爱甜蜜 换了你的试了下还是不行。
大约 2 年之前 回复

/**
* 服务调用
* @param serverName 服务名称
* @param parameters 业务参数(接口中规定的方法的参数)
* @return
* @throws AxisFault
*/
public static String rpcCall(String serverName, Object[] parameters) throws AxisFault {
//使用rpc方式调用webService
RPCServiceClient serviceClient = new RPCServiceClient();
//调用指定webService的url
EndpointReference targetEPR = new EndpointReference(Constant.WEB_SERVICE_WSDL_URL);
Options options = serviceClient.getOptions();
//客户端开启session对话管理
options.setManageSession(true);
options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT,true);
//确定目标服务地址
options.setTo(targetEPR);
//确定调用方法
options.setAction("urn:"+serverName);
//指定接口的命名空间和调用的方法名
QName qname = new QName(Constant.NAME_SPACE, serverName);
//调用方法传递参数 调用服务 获取服务返回的结果集
OMElement element = serviceClient.invokeBlocking(qname, parameters);
//返回结果就是由一段OMElement对象封装的xml字符串
//我们可以对之灵活应用,下面我取第一个元素值,并打印之,因为调用的方法返回一个结果
String result = element.getFirstElement().getText();
serviceClient.cleanupTransport();
return result;
}

qq_35280588
qq_35280588 回复zhao5243: 哦哦,没事,问题解决就行,很高兴能帮到你。
一年多之前 回复
zhao5243
深爱甜蜜 按照你的方法解决了,谢谢。但是点采纳点错了,不好意思啊。
大约 2 年之前 回复
qq_35280588
qq_35280588 回复zhao5243: https://bbs.csdn.net/topics/391904524
大约 2 年之前 回复
zhao5243
深爱甜蜜 回复qq_35280588: 报错,Unable to instantiate deployer org.apache.axis2.deployment.ServiceDeployer; see debug logs for more details
大约 2 年之前 回复
qq_35280588
qq_35280588 回复zhao5243: import org.apache.axiom.om.OMElement; import org.apache.axis2.AxisFault; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceClient; import org.apache.axis2.transport.http.HTTPConstants; import javax.xml.namespace.QName;
大约 2 年之前 回复
qq_35280588
qq_35280588 回复zhao5243: 其实写在配置文件里更好,方便后期维护
大约 2 年之前 回复
qq_35280588
qq_35280588 回复zhao5243: 自己定义的一个类,我是把wsdl地址,name_space,用户名,密码,都写在了这个类里,
大约 2 年之前 回复
zhao5243
深爱甜蜜 那个,Constant是哪个包的?
大约 2 年之前 回复

public static String rpcCall(String serverName, Object[] parameters) throws AxisFault {
RPCServiceClient serviceClient = new RPCServiceClient();
EndpointReference targetEPR = new EndpointReference(Constant.WEB_SERVICE_WSDL_URL);
Options options = serviceClient.getOptions();
options.setManageSession(true);
options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT,true);
options.setTo(targetEPR);
options.setAction("urn:"+serverName);
QName qname = new QName(Constant.NAME_SPACE, serverName);
OMElement element = serviceClient.invokeBlocking(qname, parameters);
String result = element.getFirstElement().getText();
serviceClient.cleanupTransport();
return result;
}

zhao5243
深爱甜蜜 谢谢,不过我希望是在我的代码基础上改。你这个改动太大了,完全不一样啊。
大约 2 年之前 回复

<?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI (http://jax-ws.java.net). RI's version is JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e. --><!-- Generated by JAX-WS RI (http://jax-ws.java.net). RI's version is JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e. --><definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://webservice_302/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://webservice_302/" name="HelloService">
<types>
<xsd:schema>
<xsd:import namespace="http://webservice_302/" schemaLocation="http://192.1.1.64:8082/Service/ServiceHello?xsd=1"></xsd:import>
</xsd:schema>
</types>
<message name="getValue">
<part name="parameters" element="tns:getValue"></part>
</message>
<message name="getValueResponse">
<part name="parameters" element="tns:getValueResponse"></part>
</message>
<portType name="Hello">
<operation name="getValue">
<input wsam:Action="http://webservice_302/Hello/getValueRequest" message="tns:getValue"></input>
<output wsam:Action="http://webservice_302/Hello/getValueResponse" message="tns:getValueResponse"></output>
</operation>
</portType>
<binding name="HelloPortBinding" type="tns:Hello">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"></soap:binding>
<operation name="getValue">
<soap:operation soapAction=""></soap:operation>
<input>
<soap:body use="literal"></soap:body>
</input>
<output>
<soap:body use="literal"></soap:body>
</output>
</operation>
</binding>
<service name="HelloService">
<port name="HelloPort" binding="tns:HelloPortBinding">
<soap:address location="http://192.1.1.64:8082/Service/ServiceHello"></soap:address>
</port>
</service>
</definitions>

https://download.csdn.net/download/qq_34346915/10593706 里面有全套的接口生成以及调用

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问