微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Axis远程调用WebService接口

前提:需要调用webservice接口时,获取到wsdl地址,并清楚里面的相关内容

1 引入相关jar包axis相关jar包下载

2 java相关代码,和网上提供的大致相同:

package com.demo.service;

import java.rmi.remoteexception;

import javax.xml.rpc.ServiceException;

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

public class MyClient {

	public static void main(String[] args) {
		try {
			// 直接引用远程的wsdl文件地址,如http://www.baidu.com/myService/serviceTest
			String endpoint = "";

			Service service = new Service();

			Call call = (Call) service.createCall();

			call.setTargetEndpointAddress(endpoint);
			call.setoperationName("sendInfo");// WSDL里面描述的接口名称
			call.addParameter("in0",org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);// 接口的参数
			call.addParameter("in1",javax.xml.rpc.ParameterMode.IN);// 接口的参数
			call.addParameter("in2",javax.xml.rpc.ParameterMode.IN);// 接口的参数

			call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);// 设置返回类型

			String result = (String) call.invoke(new Object[] { "","","" });// 必须和addParameter方法中设置的参数类型一致
			// 给方法传递参数,并且调用方法
			System.out.println("result is " + result);

		} catch (ServiceException e) {
			// Todo Auto-generated catch block
			e.printstacktrace();
		} catch (remoteexception e) {
			// Todo Auto-generated catch block
			e.printstacktrace();
		}

	}

}

 ================================================================================================================================ 

问题1:实际在部署开发的过程中,endpoint一开始填写的是wsdl地址,也就是类似于http://www.baidu.com/myService/serviceTest?wsdl这样的地址。而运行时会报如下错误

AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode: 
 faultString: org.xml.sax.SAXException: Bad envelope tag:  deFinitions
 faultActor: 
 faultNode: 
 faultDetail: 
	{http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXException: Bad envelope tag:  deFinitions
	at org.apache.axis.message.EnvelopeBuilder.startElement(EnvelopeBuilder.java:71)
	at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1048)
	at org.apache.xerces.parsers.AbstractSAXParser.startElement(UnkNown Source)
	at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(UnkNown Source)
	at org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentdispatcher.scanRootElementHook(UnkNown Source)
	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentdispatcher.dispatch(UnkNown Source)
	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(UnkNown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(UnkNown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(UnkNown Source)
	at org.apache.xerces.parsers.XMLParser.parse(UnkNown Source)
	at org.apache.xerces.parsers.AbstractSAXParser.parse(UnkNown Source)
	at javax.xml.parsers.SAXParser.parse(SAXParser.java:392)
	at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
	at org.apache.axis.soAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
	at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
	at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
	at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
	at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
	at org.apache.axis.client.Call.invoke(Call.java:2767)
	at org.apache.axis.client.Call.invoke(Call.java:2443)
	at org.apache.axis.client.Call.invoke(Call.java:2366)
	at org.apache.axis.client.Call.invoke(Call.java:1812)
	at com.htc.ode.service.ServiceTest.main(ServiceTest.java:34)

org.xml.sax.SAXException: Bad envelope tag:  deFinitions
	at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
	at org.apache.axis.soAPPart.getAsSOAPEnvelope(SOAPPart.java:701)
	at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
	at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
	at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
	at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
	at org.apache.axis.client.Call.invoke(Call.java:2767)
	at org.apache.axis.client.Call.invoke(Call.java:2443)
	at org.apache.axis.client.Call.invoke(Call.java:2366)
	at org.apache.axis.client.Call.invoke(Call.java:1812)
	at com.htc.ode.service.ServiceTest.main(ServiceTest.java:34)
Caused by: org.xml.sax.SAXException: Bad envelope tag:  deFinitions
	at org.apache.axis.message.EnvelopeBuilder.startElement(EnvelopeBuilder.java:71)
	at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1048)
	at org.apache.xerces.parsers.AbstractSAXParser.startElement(UnkNown Source)
	at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(UnkNown Source)
	at org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentdispatcher.scanRootElementHook(UnkNown Source)
	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentdispatcher.dispatch(UnkNown Source)
	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(UnkNown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(UnkNown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(UnkNown Source)
	at org.apache.xerces.parsers.XMLParser.parse(UnkNown Source)
	at org.apache.xerces.parsers.AbstractSAXParser.parse(UnkNown Source)
	at javax.xml.parsers.SAXParser.parse(SAXParser.java:392)
	at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
	at org.apache.axis.soAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
	... 9 more
而将http://www.baidu.com/myService/serviceTest?wsdl修改成http://www.baidu.com/myService/serviceTest后,也就是去除"?wsdl"则可正常访问。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐