我现在写了个程序,是调用webservice的,执行后我打印返回码是500 错误信息是 java.io.IOException: Server returned HTTP response code: 500 for URL: http://10.45.7.18:8071/ocswebservices/services/WebServices?wsdl at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1133) at com.ztesoft.zsmart.bss.sett.appstore.bll.ProtoSoapHTTPBase.write(ProtoSoapHTTPBase.java:167) at com.ztesoft.zsmart.bss.sett.appstore.bll.ProtoSoapHTTPBase.main(ProtoSoapHTTPBase.java:284) 我谷歌了下,所有的回答都是java服务器做了限制,需要加上 con.addRequestProperty("User-Agent", "Mozilla/4.0(compatible;MSIE5.5;Windows NT; DigExt)"); 但是我加上了还是没用 URL写http://10.45.7.18:8071/ocswebservices/services/WebServices?wsdl或者http://10.45.7.18:8071/ocswebservices/services/WebServices都不行。 InputStream input = con.getInputStream(); 引起的 附上java代码,其实可以不用看。。 package com.ztesoft.zsmart.bss.sett.appstore.bll; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; import java.net.URL; import org.apache.axis.client.Call; import org.apache.log4j.Logger; import com.ztesoft.zsmart.core.utils.StringUtil; /** * <Description> <br> * * @author ProvTeam<br> * @version 1.0<br> * @taskId <br> * @CreateDate 2012-2-5 <br> * @since V7.3<br> * @see <br> */ public class ProtoSoapHTTPBase { /** * 读缓存的大小 */ public final int readBufferSize = 1024 * 10; /** * 日志对象 */ private static Logger logger = Logger.getLogger(ProtoSoapHTTPBase.class); /** * 主机地址 */ protected String host = null; /** * 端口 */ protected String port = null; /** * 路径 */ protected String path = null; /** * 是否是HTTPS协议 */ protected boolean isHttps = false; /** * http协议的返回 */ byte[] httpResp = null; /** * 是否可读标记 */ protected boolean toRead = false; /** * URL */ protected URL url = null; /** * http链接客户端 */ protected HttpURLConnection httpClient = null; /** * https链接客户端 */ protected HttpURLConnection httpsClient = null; // private boolean terminated = false; /** * webservice 服务url */ protected String serverAddress = null; /** * webservice 服务SOAPAction */ protected String soapAction = null; /** * 调用webservice超时 */ protected int timeout = 5000; /** * 底层调用 */ protected Call callHandler = null; /** * 回复消息 */ byte[] soapResp = null; /** * 编码 */ private String encoding = "UTF-8"; /*************************************************************************** * 写信息 * * @param data byte[] * @return int */ public int write(byte[] data) { // TODO Auto-generated method stub if (data == null) { return -2; } try { logger.debug(">>>>>>>>>send to the Http Server....."); String req = new String(data); logger.info("HTTP request:" + req); logger.info("url:" + this.url); if ("Default".equals(encoding)) { } else { data = req.getBytes(encoding); } System.setProperty("sun.net.client.defaultConnectTimeout", String.valueOf(5 * 1000)); System.setProperty("sun.net.client.defaultReadTimeout", String.valueOf(this.timeout)); HttpURLConnection con = (HttpURLConnection) url.openConnection(); // Assert.isNotNull(con, "Http Connection is Null"); if (con == null) { return -2; } con.setRequestMethod("POST"); con.setUseCaches(false); con.setDoOutput(true); con.setDoInput(true); con.addRequestProperty("User-Agent", "Mozilla/4.0(compatible;MSIE5.5;Windows NT; DigExt)"); con.setRequestProperty("Content-type", "application/soap+xml; charset=utf-8"); con.setAllowUserInteraction(true); con.connect(); OutputStream output = con.getOutputStream(); // Assert.isNotNull(output, "Http outputstream is Null"); output.write(data); output.flush(); output.close(); // Assert.isNotNull(con, "con is Null"); InputStream input = con.getInputStream(); // Assert.isNotNull(input, "Http inputstream is Null"); try { this.soapResp = readData(input); logger.info("HTTP response:" + new String(soapResp, this.encoding)); } finally { if (con != null) { con.disconnect(); con = null; } } } catch (ProtocolException ex) { logger.error("The Http connection UNSupport the Post method.", ex); ex.printStackTrace(); return -1; } catch (IOException ex) { logger.error("The Http connection Stream error,", ex); ex.printStackTrace(); return -2; } catch (Exception ex) { logger.error("The Http other error,", ex); ex.printStackTrace(); return -3; } return data.length; } /*************************************************************************** * 读信息 * * @param input InputStream * @return byte[] */ protected byte[] readData(InputStream input) { byte[] res = null; try { if (input != null) { int len = 0; int length = readBufferSize; int offset = 0; byte[] inputBuffer = new byte[length]; while ((len = input.read(inputBuffer, offset, length - offset)) >= 0) { logger.info("read length: " + len); offset += len; } if (len < 0) { logger.warn("The http has closed....."); } if (offset > 0) { logger.info("read total length: " + offset); res = new byte[offset]; System.arraycopy(inputBuffer, 0, res, 0, offset); if (input != null) { input.close(); } } } } catch (Exception ex) { logger.error(ex); } return res; } public static void main(String[] args) throws MalformedURLException { StringBuffer sb = new StringBuffer(); sb.append("<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ocs="http://ocs.ztesoft.com">"); sb.append(" <soapenv:Header>"); sb.append(" <ns1:AuthHeader soapenv:mustUnderstand="0" xmlns:ns1="http://ocs.ztesoft.com">"); sb.append(" <ns1:Username>zsmart1</ns1:Username>"); sb.append(" <ns1:Password>zsmart1</ns1:Password>"); sb.append(" </ns1:AuthHeader>"); sb.append(" </soapenv:Header> "); sb.append(""); sb.append(" <soapenv:Body>"); sb.append(" <ocs:doService>"); sb.append(" <ocs:in0><![CDATA["); sb.append("<?xml version="1.0" encoding="GB2312"?>"); sb.append("<zsmart>"); sb.append(" <Data>"); sb.append(" <header>"); sb.append(" <ACTION_ID>PayForPrm</ACTION_ID>"); sb.append(" <REQUEST_ID>10200700021</REQUEST_ID>"); sb.append(" </header>"); sb.append(" <body> "); sb.append(" <PAY_DIRECTION>P</PAY_DIRECTION> "); sb.append(" <STAFF_ID>1</STAFF_ID>"); sb.append(" <BILL_INST_ID>118</BILL_INST_ID>"); sb.append(" <PARTNER_ID>644</PARTNER_ID>"); sb.append(" <AMOUNT>30000</AMOUNT>"); sb.append(" <CHANGE>3000</CHANGE>"); sb.append(" <PAYMENT_METHOD>C</PAYMENT_METHOD> "); sb.append(" </body>"); sb.append(" </Data>"); sb.append("</zsmart>"); sb.append(""); sb.append(""); sb.append("]]></ocs:in0>"); sb.append(" </ocs:doService>"); sb.append(" </soapenv:Body>"); sb.append("</soapenv:Envelope>"); ProtoSoapHTTPBase p = new ProtoSoapHTTPBase(); p.url = new URL("http://10.45.7.18:8071/ocswebservices/services/WebServices?wsdl"); int i = p.write(sb.toString().getBytes()); System.out.println(i); } } |
|
送一个谷歌好用的地址 http://84.15.64.35/
|
|
40分 |
看不懂,不过帮顶…
|
http://10.45.7.18:8071/ocswebservices/services/WebServices?wsdl可以在浏览器直接访问
通过soapUI发送报文可以查询(http://10.45.7.18:8071/ocswebservices/services/WebServices)。 |
|
说简单点就是java给webservice发送完整的xml格式的报文 然后就收返回的数据
|
|
10分 |
服务器端有没有验证,如有加上验证,如下
/** public class MyAuthenticator extends Authenticator { // This method is called when a password-protected URL is accessed protected PasswordAuthentication getPasswordAuthentication() { String username = ""; String password = ""; ReadProperties rnp = ReadProperties.getInstance(); username = StrUtil.isBlank(username) ? "admin" : username; password = StrUtil.isBlank(password) ? "admin123" : password; // Return the information return new PasswordAuthentication(username, password.toCharArray()); } } |
5分 |
你浏览器里访问 webservice 可以吗?
|
5分 |
500好像是服务器错误吧
|
浏览器输入http://10.45.7.18:8071/ocswebservices/services/WebServices?wsdl是可以的 |
|
这种提示的错误是
java.io.IOException: Server returned HTTP response code: 500 for URL: http://10.45.7.18:8071/ocswebservices/services/WebServices?wsdl at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1133) at com.ztesoft.zsmart.bss.sett.appstore.bll.a._callHttp(a.java:85) at com.ztesoft.zsmart.bss.sett.appstore.bll.a.main(a.java:104) package com.ztesoft.zsmart.bss.sett.appstore.bll; import java.util.Date; import java.text.DateFormat; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import javax.xml.namespace.QName; import java.io.InputStream; import java.io.OutputStream; import java.io.StringReader; import java.lang.Integer; import java.net.HttpURLConnection; import java.net.URL; import javax.xml.rpc.ParameterMode; public class a { public static String _callHttp(String callurl) throws Exception { StringBuffer sb = new StringBuffer(); sb.append("<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ocs="http://ocs.ztesoft.com">\r\n"); sb.append(" <soapenv:Header>\r\n"); sb.append(" <ns1:AuthHeader soapenv:mustUnderstand="0" xmlns:ns1="http://ocs.ztesoft.com">\r\n"); sb.append(" <ns1:Username>zsmart1</ns1:Username>\r\n"); sb.append(" <ns1:Password>zsmart1</ns1:Password>\r\n"); sb.append(" </ns1:AuthHeader>\r\n"); sb.append(" </soapenv:Header> \r\n"); sb.append("\r\n"); sb.append(" <soapenv:Body>\r\n"); sb.append(" <ocs:doService>\r\n"); sb.append(" <ocs:in0><![CDATA[\r\n"); sb.append("<?xml version="1.0" encoding="UTF-8"?>\r\n"); sb.append("<zsmart>\r\n"); sb.append(" <Data>\r\n"); sb.append(" <header>\r\n"); sb.append(" <ACTION_ID>PayForPrm</ACTION_ID>\r\n"); sb.append(" <REQUEST_ID>10200700021</REQUEST_ID>\r\n"); sb.append(" </header>\r\n"); sb.append(" <body> \r\n"); sb.append(" <PAY_DIRECTION>P</PAY_DIRECTION> \r\n"); sb.append(" <STAFF_ID>1</STAFF_ID>\r\n"); sb.append(" <BILL_INST_ID>118</BILL_INST_ID>\r\n"); sb.append(" <PARTNER_ID>644</PARTNER_ID>\r\n"); sb.append(" <AMOUNT>30000</AMOUNT>\r\n"); sb.append(" <CHANGE>3000</CHANGE>\r\n"); sb.append(" <PAYMENT_METHOD>C</PAYMENT_METHOD> \r\n"); sb.append(" </body>\r\n"); sb.append(" </Data>\r\n"); sb.append("</zsmart>\r\n"); sb.append("\r\n"); sb.append("\r\n"); sb.append("]]></ocs:in0>\r\n"); sb.append(" </ocs:doService>\r\n"); sb.append(" </soapenv:Body>\r\n"); sb.append("</soapenv:Envelope>\r\n"); String xml = sb.toString(); StringReader reader = null; String result = ""; URL u0 = new URL(callurl); HttpURLConnection conn = (HttpURLConnection) u0.openConnection(); conn.setRequestMethod("POST"); // 采用post方法发送 byte[] contentbyte = xml.getBytes(); // 内容转变成byte数组 // 必须加"Content-Type","text/plain",然后接收方的页面写<%@ page // contentType="text ml; charset=gb2312" %> conn.setRequestProperty("Content-Type", "text/plain"); conn.setRequestProperty("Content-Length", "" + contentbyte.length); conn.setRequestProperty("Content-Language", "en-US"); conn.addRequestProperty("User-Agent", "Mozilla/4.0(compatible;MSIE5.5;Windows NT; DigExt)"); conn.setConnectTimeout(30000); conn.setReadTimeout(30000); conn.setUseCaches(false); conn.setDoInput(true); conn.setDoOutput(true); OutputStream out = conn.getOutputStream(); out.write(contentbyte); out.flush(); out.close(); InputStream in = conn.getInputStream(); // 取返回值 StringBuffer buffer = new StringBuffer(); int i = 0; while (i != -1) { i = in.read(); if (i != -1) { buffer.append((char) i); } } in.close(); result = new String(buffer.toString().getBytes("iso-8859-1"), "UTF-8"); return result; } public static void main(String[] args) { try { System.out .println(a ._callHttp("http://10.45.7.18:8071/ocswebservices/services/WebServices?wsdl")); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
|
35分 |
看不出来。 我们没法测试啊。
|
5分 |
conn.setRequestMethod(“POST”); 改为conn.setRequestMethod(“soap”)
webservice不能发post请求吧 |