求救Java怎么调用 net的webService

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求救Java怎么调用 net的webService相关的知识,希望对你有一定的参考价值。

一. 使用axis1.x调用webservice方法
Axis的最常用版本:1.4和2.0版本。以下为1.4版本
 核心代码:
// webserviceURL
service_url = "http://vip.cxcod.com/PodApi/GetPodStr.asmx?wsdl";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(service_url));
// 设置要调用的方法
// http://intelink.net/是wsdl中definitions根节点的targetNamespace属性值
call.setOperationName(new QName("http://intelink.net/","GetStrByJobno"));
// 该方法需要的参数
call.addParameter("CustNo",
  org.apache.axis.encoding.XMLType.XSD_STRING,
  javax.xml.rpc.ParameterMode.IN);
call.addParameter("passwd",
   org.apache.axis.encoding.XMLType.XSD_STRING,
   javax.xml.rpc.ParameterMode.IN);
call.addParameter("Jobno",
   org.apache.axis.encoding.XMLType.XSD_STRING,
   javax.xml.rpc.ParameterMode.IN);
// 方法的返回值类型
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
// call.setUseSOAPAction(true); //call.setSOAPActionURI("http://intelink.net/GetStrByJobno");
// 调用该方法, new Object[] CustNo, passwd, Jobno为参数列表
String xmlStr = call.invoke(new Object[] CustNo, passwd, Jobno).toString();
catch (Exception e)
e.printStackTrace();

JAVA用这种方式调用webservice,需要注意的地方:
1. 服务器未能识别 HTTP 标头 SOAPAction 的值:
症状一:
Web Service + ASP.NET 应用程序部署到服务器默认目录中,在IE中用http://<服务器地址>/<程序目录名>/<默认启动页面名>发生“服务器未能识别 HTTP 标头 SOAPAction 的值”错误。
症状二:
在Java平台上调用.NET Web Service的服务时,出现"服务器未能识别 HTTP 标头 SOAPAction 的值"。
症状三:
在Java平台下调用.NET WEB Service,出现数据时有时无。

解决对策:

给.NET的WebService类(即.asmx文件下的类)添加属性[SoapDocumentService(RoutingStyle=SoapServiceRoutingStyle.RequestElement)]
小知识:
什么是SoapAction?它在WSDL中有何作用?
SOAPAction HTTP request header被用来标识SOAP HTTP请求的目的地,其值是个URI地址。SOAP发送并不限制格式、URI特征或其必须可解析,那么在这种情况下,发送一个HTTP SOAP请求时,其HTTP客户端必须使用/指明SOAPAction HTTP request header。

SOAPAction header的内容可以被用在服务端,诸如:防火墙适当的过滤基于HTTP的SOAP请求消息等场景。SOAPAction header的值为空串("")表示SOAP消息的目的地由HTTP请求的URI标识;无值则表示没有指定这条消息的目的地。

本人补充:
在.NET环境调用.NET WebService出现 “SOAPAction 值在 XML Web services 的所有方法中不唯一的错误”,也可以通过此法解决。

2. 为了Java能够调用WebService的方法,所以。NETP写的WebServiced的每个方法都要声明为Rpc方法,即添加"[SoapRpcMethod.....]".
例如:[WebMethod]
[SoapRpcMethod(Use=SoapBindingUse.Literal,Action= http://tempuri.org/HelloWorld", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/")]

3. 对返回值、参数的处理上:
应尽量将webservice方法的返回值、参数都写成字符串(String)不要使用复杂对象类型,这样便于在网络上传输。避免了复杂对象类型的不易转换问题。。。对于返回类型是字符串数组型的,可以设置返回类型为org.apache.axis.encoding.XMLType.SOAP_VECTOR或java.lang.String[].class.

二.利用xfire调用WebService
XFire是新一代的Java Web服务引擎,XFire使得在JavaEE应用中发布Web服务变得轻而易举。和其他Web服务引擎相比,XFire的配置非常简单,可以非常容易地和Spring集成,它使得Java开发人员终于可以获得和.Net开发人员一样的开发效率。

核心代码:
Service service = new ObjectServiceFactory().create(IWebservice.class);
XFireProxyFactory factory =
new XFireProxyFactory(XFireFactory.newInstance().getXFire());
String url= "http://localhost:8080/webservices/services/webservices";
IWebservice iw = (IWebservice) factory.create(service, url);
List list=iw.getTest();
参考技术A blic static void main(String[] args) throws ServiceException, RemoteException
// TODO Auto-generated method stub
Service1 _Service1 = new Service1Locator();
Service1Soap_PortType _Service1Soap_PortType;
String resultStr = null;

_Service1Soap_PortType = _Service1.getService1Soap();
resultStr = _Service1Soap_PortType.helloWorld("zybaby");

System.out.println(resultStr);

java axis调用webservice,接口方法中的数组型参数应该怎么传参

使用第三方jar包动态调用webservice,接口方法中存在数组型参数时,应该怎么调用

服务端接口方法:
public int sendDTMS(String[] mobiles, String addSerial, int smsPriority,
String sign, String msgGroup, boolean isMo, String tempId,
String[] params)

客户端调用:
Call call=setSendDTMSCallParams(this.getSendDTMSCall());
responseString=(String)call.invoke(params);

参数params设置:
Object[] params=new Object[]
null,
new String[]"111","222",
5,
null,
null,
false,
"681",
"4637"
;

当params中使用new String【】 传参时报错:
Exception in thread "main" AxisFault
faultCode: http://schemas.xmlsoap.org/soap/envelope/Client
faultSubcode:
faultString: Unmarshalling Error: 意外的元素 (uri:"", local:"mobiles")。所需元素为(none)

求大神帮忙,这样的接口我在使用axis调用时应该怎么做?紧急,高分

虽然我没用过你这个开发webservice,但用过xfire,建议你把数组改为string传值,然后那边进行split再转为数组 参考技术A 郭德纲的行啊

以上是关于求救Java怎么调用 net的webService的主要内容,如果未能解决你的问题,请参考以下文章

java 项目怎么调用.net写的webService,求源码。

关于.net 调用java的webservice时,返回的对象是null,该怎么处理

统一身份认证平台调用CXF WebService接口的传值为NULL,本地测试正常,求救···

.net WebService接口参数为实体类数组,java调用接口怎么把参数转换成string类型的xml内容

在asp.net里怎样异步调用WebService方法

.net 里就给了一个webservice接口怎么用