Java调用WebService可以直接使用Apache提供的axisjar自己编写代码,或者利用Eclipse自动生成WebService Client代码,利用其中的Proxy类进行调用。理论上是一样的,只不过用Eclipse自动生成代码省事些。
1、编写代码方式:
import javarmiRemoteException;
import orgapacheaxisclientCall;
import orgapacheaxisclientService;
import orgapacheaxismessagePrefixedQName;
import orgapacheaxismessageSOAPHeaderElement;
import comcezannegoldenuserException;
import comcezannegoldenuserUserManagerServiceProxy;
import javaxxmlnamespaceQName;
import javanetMalformedURLException;
import javaxxmlrpcServiceException;
import javaxxmlsoapName;
import javaxxmlsoapSOAPException;
public class testWebService {
public static String getResult() throws ServiceException, MalformedURLException, RemoteException, SOAPException
{
//标识Web Service的具体路径
String endpoint = "WebService服务地址";
// 创建 Service实例
Service service = new Service();
// 通过Service实例创建Call的实例
Call call = (Call) servicecreateCall();
//将Web Service的服务路径加入到call实例之中
callsetTargetEndpointAddress( new javanetURL(endpoint) );//为Call设置服务的位置
// 由于需要认证,故需要设置调用的SOAP头信息。
Name headerName = new PrefixedQName( new QName("发布的wsdl里的targetNamespace里的url", "string_itemName") );
orgapacheaxismessageSOAPHeaderElement header = new SOAPHeaderElement(headerName);
headeraddTextNode( "blablabla" );
calladdHeader(header);
// SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("发布的wsdl里的targetNamespace里的url", "SoapHeader");
// soapHeaderElementsetNamespaceURI("发布的wsdl里的targetNamespace里的url");
// try
// {
// soapHeaderElementaddChildElement("string_itemName")setValue("blablabla");
// }
// catch (SOAPException e)
// {
// eprintStackTrace();
// }
// calladdHeader(soapHeaderElement);
//调用Web Service的方法
orgapacheaxisdescriptionOperationDesc oper;
orgapacheaxisdescriptionParameterDesc param;
oper = new orgapacheaxisdescriptionOperationDesc();
opersetName("opName");
param = new orgapacheaxisdescriptionParameterDesc(new javaxxmlnamespaceQName("", "arg0"), orgapacheaxisdescriptionParameterDescIN, new javaxxmlnamespaceQName(", "string"), javalangStringclass, false, false);
paramsetOmittable(true);
operaddParameter(param);
param = new orgapacheaxisdescriptionParameterDesc(new javaxxmlnamespaceQName("", "arg1"), orgapacheaxisdescriptionParameterDescIN, new javaxxmlnamespaceQName(", "string"), javalangStringclass, false, false);
paramsetOmittable(true);
operaddParameter(param);
param = new orgapacheaxisdescriptionParameterDesc(new javaxxmlnamespaceQName("", "arg2"), orgapacheaxisdescriptionParameterDescIN, new javaxxmlnamespaceQName(", "string"), javalangStringclass, false, false);
paramsetOmittable(true);
operaddParameter(param);
opersetReturnType(new javaxxmlnamespaceQName(", "string"));
opersetReturnClass(javalangStringclass);
opersetReturnQName(new javaxxmlnamespaceQName("", "return"));
opersetStyle(orgapacheaxisconstantsStyleWRAPPED);
opersetUse(orgapacheaxisconstantsUseLITERAL);
operaddFault(new orgapacheaxisdescriptionFaultDesc(
new javaxxmlnamespaceQName("发布的wsdl里的targetNamespace里的url", "Exception"),
"Exception",
new javaxxmlnamespaceQName("发布的wsdl里的targetNamespace里的url", "Exception"),
true
));
callsetOperation( oper );
callsetOperationName(new javaxxmlnamespaceQName("发布的wsdl里的targetNamespace里的url", "opName"));
//调用Web Service,传入参数
String res = ( String ) callinvoke( new Object[]("arg0","arg1"));
Systemoutprintln("===============");
return res;
}
/
@param args
/
public static void main(String[] args) {
try {
Systemoutprintln(getResult());
} catch (MalformedURLException e) {
eprintStackTrace();
} catch (RemoteException e) {
eprintStackTrace();
} catch (ServiceException e) {
eprintStackTrace();
} catch (SOAPException e) {
eprintStackTrace();
}
}
}
2、利用Eclipse自动生成WebService client代码就容易多了:
首先,new project,选择other,在输入框中输入Web Service Client,选中搜索后的结果,点击Next,在Service definition中输入 WebService的发布地址,点击Finish
这样,WebService Client代码已经生成好了。
接下来写一个Test类,在main函数中输入如下代码:
String endpoint = "服务器的WebService的地址";
YourWebServiceNameProxy umsp = new YourWebServiceNameProxy (endpoint);
try {
String resultStr = umspopMethod("arg0","arg1");
Systemoutprintln(resultStr);
} catch (Exception e) {
Systemoutprintln("异常");
eprintStackTrace();
} catch (RemoteException e) {
Systemoutprintln("RemoteException异常");
eprintStackTrace();
}生成webservice客户端的解决办法 JDK自带wsimport命令 wsimport命令在JDK16及以上版本中自带该工具,所以如果想使用本方式须安装JDK16及其以上的版本。 打开cmd命令窗口,快捷方式为window+r组合键。打开cmd窗口后,通过wsimport命令生成webs
只映射A的地址是可行的,因为对其他服务器的调用是通过A,而不是通过公网。
我觉得应该是只映射了80端口的问题,A发布的webservice是用的什么端口?是80端口么?如果不是,那显然是被防火墙限制了,所以会报无法连接。
在服务端写一个专门针对文件的方法,客户端参数类型可以是Byte/DataHandler等类型,在服务端进行解析参数写入文件即可。最重要的是要设置WebService为可传递附件,默认的WebService仅仅支持一般数据类型的传递。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)