JAVA通过soap访问webservice

最近我在写一个程序跟别的程序做接口,对方提供webservice服务,但对方没有提供wsdl文件,只给了一个soap的url:http:// 121.23.127.10:1920///cms/soap,还告诉interface:AM_SOAP,method:AM_GET,以及一个JavaScript写的访问webservice的例子,代码如下:
function getdata() {
var xmlHttp;
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
//soap的URL
var url = "http:// 121.23.127.10:1920///cms/soap";
//xml格式的字符串请求信息
var query = "<AM_Get><userid>admin</userid>";
query = query + "<password>admin</password>";
query = query + "<object>ManagedSystem</object>";
query = query + "</AM_Get>"
//设置回调函数
xmlHttp.onreadystatechange = checkCall(){
xmlDoc = xmlHttp.responseXML;
alert(xmlDoc);
}
xmlHttp.open("POST",url,true);
xmlHttp.setRequestHeader("MethodName", "AM_Get");//方法名
xmlHttp.setRequestHeader("InterfaceName", "AM_SOAP");//接口名
xmlHttp.setRequestHeader("MessageType", "Call");//这个不知道什么意思
xmlHttp.setRequestHeader("Content-Type", "text/xml");//设置返回格式
xmlHttp.send(query);//发送请求
}
现在我想用java类来实现这个方法,发送一个xml格式的String字符串做参数,访问webservice程序,但是不是怎么做,希望各位大侠帮帮指点。

我做过的一个例子:

import javax.xml.namespace.QName;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

import com.yupont.utils.XMLUtil;

public class ServiceTest {

public String callSGCCService(String operationName,String inputXML,String serviceName,String serverContextRoot)
{
StringBuilder result=null;
try {
String endpoint = serverContextRoot+"/services/"+serviceName;
Service service = new Service();// 创建一个服务(service)调用(call)
Call call = (Call)service.createCall();// 通过service创建call对象
call.setTargetEndpointAddress(new java.net.URL(endpoint));// 设置service所在URL
call.setOperationName(new QName("http://service.yupont.com",operationName));
call.setUseSOAPAction(true);
String result1 = (String)call.invoke(new Object[]{inputXML});
System.out.println(result1);
result=new StringBuilder(result1);
result.append("@@@@@");
result.append(XMLUtil.getNodeTxtByNodeName(XMLUtil.strToXML(result1).getRootElement(), "URL"));
}
catch (Exception e)
{
System.err.println(e.toString());
}
return result.toString();
}

}
你可以参考一下追问

请问这4个参数都是什么意思?
还有call.setOperationName(new QName("http://service.yupont.com",operationName));这句话什么意思,其中的http://是什么?

追答

Service service = new Service();// 创建一个服务(service)调用(call)
Call call = (Call)service.createCall();// 通过service创建call对象
call.setTargetEndpointAddress(new java.net.URL(endpoint));// 设置service所在URL
call.setOperationName(new QName("http://service.yupont.com",operationName));
call.setUseSOAPAction(true);
String result1 = (String)call.invoke(new Object[]{inputXML});
这段是主要的

追问

我想问operationName,inputXML,serviceName,serverContextRoot分别是什么?
inputXML我知道是xml格式的字符传,operationName,serviceName,serverContextRoot分别是什么我就不知道了,请说详细点。
还有这句是干什么用的?call.setOperationName(new QName("http://service.yupont.com",operationName));
其中的http://service.yupont.com是什么意思

追答

Service service = new Service();// 创建一个服务(service)调用(call)
Call call = (Call)service.createCall();// 通过service创建call对象
call.setTargetEndpointAddress(new java.net.URL(endpoint));// 设置service所在URL
call.setOperationName(new QName("http://service.yupont.com",operationName));
call.setUseSOAPAction(true);
String result1 = (String)call.invoke(new Object[]{inputXML});
endpoint 为wsdl地址,operationName为操作名,inputXML为操作参数,还有不明白的吗
http://service.yupont.com可以为空

温馨提示:答案为网友推荐,仅供参考
相似回答