求助!在调取对方提供的url时报错,无法获得返回报文,但是在主机上传报文文档给这地址却能获得返回报文,帮帮忙!

xiaoqingxinyi 2017-11-17 03:38:42
对方给了一个url地址:http://10.33.251.176:19998/OTHER/httpService/4ASystem/zc/js
服务名:CheckUserRealNameInfo
请求参数名:RequestInfo
和报文结构。

我在代码中的调用是:
String endpoint = "http://10.33.251.176:19998/OTHER/httpService/4ASystem/zc/js";//接口URL
System.out.println("endpoint=========" + endpoint);

// 创建一个服务(service)调用(call)
org.apache.axis.client.Service service = new org.apache.axis.client.Service();
Call call = (Call) service.createCall();// 通过service创建call对象
//call.setTargetEndpointAddress(new java.net.URL(endpoint)); // 设置service所在URL
call.setTargetEndpointAddress(endpoint);
call.setOperationName("CheckUserRealNameInfo");// 设置方法名
call.addParameter("RequestInfo", XMLType.XSD_STRING, ParameterMode.IN);// 设置入参
call.setReturnType(XMLType.XSD_STRING);//设置返回值类型


System.out.println("调取服务接口====");
result = (String)call.invoke(new Object[]{param});


报错信息为:
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXException: Bad envelope tag: EnvelRSP
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXException: Bad envelope tag: EnvelRSP
at org.apache.axis.message.EnvelopeBuilder.startElement(EnvelopeBuilder.java:71)
at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1048)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:379)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:605)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3138)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:880)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:648)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:332)
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 org.apache.jsp.configure.template._198.validPhoneNum_jsp._jspService(validPhoneNum_jsp.java:186)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.ailk.toptea.SecurityFilter.doFilter(SecurityFilter.java:174)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:745)

{http://xml.apache.org/axis/}hostname:a4cs7

org.xml.sax.SAXException: Bad envelope tag: EnvelRSP
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 org.apache.jsp.configure.template._198.validPhoneNum_jsp._jspService(validPhoneNum_jsp.java:186)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.ailk.toptea.SecurityFilter.doFilter(SecurityFilter.java:174)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.xml.sax.SAXException: Bad envelope tag: EnvelRSP
at org.apache.axis.message.EnvelopeBuilder.startElement(EnvelopeBuilder.java:71)
at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1048)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:379)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:605)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3138)


当在代码中获取不到报文后,向对方询问怎么解决时,对方让我在主机端(LINUX)通过创建一个文档:4a.txt,将传参报文写在里面,通过 curl -d @4a.txt http://10.33.251.176:19998/OTHER/httpService/4ASystem/zc/js 命令获取到返回报文,但是代码中还是获取不到返回报文,请问下这个是什么原因导致的,怎么样才能在代码中获取到返回报文。
...全文
571 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoqingxinyi 2017-12-20
  • 打赏
  • 举报
回复
问题已经解决,是服务方提供的接口是用ebus写的webservice接口,是http+xml格式,需要将传参转换成数据流进行传输,方法为



import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;

public class HttpURLConnHelper {
	public static final Logger log = Logger.getLogger(HttpURLConnHelper.class);
public static String execute(String serverUrl, String message, int connectTimeout, int readTimeout) throws IOException {

		java.net.URL connURL = new java.net.URL(serverUrl);
		HttpURLConnection httpCon = (HttpURLConnection) connURL.openConnection();

		// 设置http请求的头部
		httpCon.setUseCaches(false);// Post 请求不能使用缓存
		httpCon.setDoOutput(true); // http正文内,因此需要设为true, 默认情况下是false;
		httpCon.setDoInput(true); // 设置是否从httpUrlConnection读入,默认情况下是true;

		// 设定传送的内容类型是可序列化的java对象
		httpCon.setRequestProperty("Content-type", "text/xml; charset=UTF-8");
		httpCon.setRequestMethod("POST"); // 设定请求的方法为"POST",默认是GET
		httpCon.setConnectTimeout(connectTimeout); // 连接主机的超时时间(单位:毫秒)
		httpCon.setReadTimeout(readTimeout); // 从主机读取数据的超时时间(单位:毫秒)

		// 写入http请求的正文
		DataOutputStream dataOutputStream = new DataOutputStream(httpCon.getOutputStream());
		dataOutputStream.write(message.getBytes("UTF-8"));
		dataOutputStream.flush();
		dataOutputStream.close();
		int responseCode = httpCon.getResponseCode();
		if (responseCode == HttpURLConnection.HTTP_OK) {// 返回码正确
			// 将内存缓冲区中封装好的完整的HTTP请求电文发送到服务端。
			BufferedReader bufReader = new BufferedReader(new InputStreamReader(httpCon.getInputStream(), "UTF-8"));
			StringBuffer sb = new StringBuffer();
			String line = "";
			while ((line = bufReader.readLine()) != null) {
				sb.append(line);
			}
			bufReader.close();
			return sb.toString();
		} else {// 返回码错误,例如:404
			log.debug("调用Http请求有异常!返回码为:" + responseCode);
			return "";
		}
	}

public static int getCONNECTTIMEOUT() {
		return CONNECTTIMEOUT;
	}

	public static void setCONNECTTIMEOUT(int connecttimeout) {
		CONNECTTIMEOUT = connecttimeout;
	}

	public static int getREADTIMEOUT() {
		return READTIMEOUT;
	}

	public static void setREADTIMEOUT(int readtimeout) {
		READTIMEOUT = readtimeout;
	}
}

Sunyiban 2017-11-21
  • 打赏
  • 举报
回复
先确认你的请求有没有发送成功 再确认你的报文是否组装正确 最后如果收不到返回结果就是他们的问题了
逗泥丸的平方 2017-11-21
  • 打赏
  • 举报
回复
引用 2 楼 xiaoqingxinyi 的回复:
[quote=引用 1 楼 qq_35209952 的回复:] 所以 EnvelRSP 这个是什么 要不然你在代码和配置文件里找找看
我这边没有用到这个,不过在对方给的返回报文格式中有个<RSP></RSP>,是对方解析时出的错吗?[/quote] 你没说你用的是什么框架 虽然说了我估计我也不知道 ....... 但是直接原因肯定是xml解析的问题
xiaoqingxinyi 2017-11-20
  • 打赏
  • 举报
回复
引用 1 楼 qq_35209952 的回复:
所以 EnvelRSP 这个是什么 要不然你在代码和配置文件里找找看
我这边没有用到这个,不过在对方给的返回报文格式中有个<RSP></RSP>,是对方解析时出的错吗?
逗泥丸的平方 2017-11-17
  • 打赏
  • 举报
回复
所以 EnvelRSP 这个是什么 要不然你在代码和配置文件里找找看

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧