java - WSDL SOAP Webservice Java 客户端的错误 415
问题描述
这次我需要一些帮助来解决我找不到问题所在的错误。
我开发了一个非常简单的 Java 代码来使用 Web 服务,但是当我运行它时,我得到了这个讨厌的错误:“原因:java.io.IOException:服务器返回 HTTP 响应代码:415 用于 URL:http://www .dataaccess.com/webservicesserver/numberconversion.wso/NumberToWords"
调查此错误时,它说这与不支持 Content-Type 有关,因此下载了 SoapUI 5.6.0 以查看 WS 正在等待什么,这对我来说似乎是正确的。
这是我的代码:
package principal;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class PruebaWS {
public void getNumber(int number){
String wsURL = "http://www.dataaccess.com/webservicesserver/numberconversion.wso/NumberToWords";
URL url = null;
URLConnection connection = null;
HttpURLConnection httpConn = null;
String responseString = null;
String outputString = null;
ByteArrayOutputStream bout = null;
OutputStream out = null;
InputStreamReader isr = null;
BufferedReader in = null;
String xmlInput =
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://www.dataaccess.com/webservicesserver/\">" +
" <soapenv:Header/>" +
" <soapenv:Body>" +
" <web:NumberToWords>" +
" <web:ubiNum>" + number +"</web:ubiNum>" +
" </web:NumberToWords>" +
" </soapenv:Body>" +
"</soapenv:Envelope>";
try {
url = new URL(wsURL);
connection = url.openConnection();
httpConn = (HttpURLConnection) connection;
byte[] buffer = new byte[xmlInput.length()];
buffer = xmlInput.getBytes();
String SOAPAction = "";
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("SOAPAction", SOAPAction);
httpConn.setRequestProperty("Content-Length", String.valueOf(buffer.length));
httpConn.setRequestProperty("Content-Type", "text/xml;charset=utf-8");
httpConn.setRequestProperty("Accept", "*/xml");
httpConn.setDoInput(true);
httpConn.setDoOutput(true);
httpConn.setUseCaches(false);
out = httpConn.getOutputStream();
out.write(buffer);
out.close();
// Lee la respuesta y escribe a un output estándard
isr = new InputStreamReader(httpConn.getInputStream());
in = new BufferedReader(isr);
while ((responseString = in.readLine()) != null)
outputString = outputString + responseString;
System.out.println(outputString);
System.out.println("");
// Obtiene la respuesta desde la llamada al webService
Document document = parseXmlFile(outputString);
NodeList nodeList = document.getElementsByTagName("m:NumberToWordsResponse");
String webServiceResponse = nodeList.item(0).getTextContent();
System.out.println("La respuesta del web service es: " + webServiceResponse);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private Document parseXmlFile(String in){
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(in));
return db.parse(is);
} catch (ParserConfigurationException | SAXException | IOException e) {
throw new RuntimeException(e);
}
}
}
这是运行时的错误:
线程“主”java.lang.RuntimeException 中的异常:java.io.IOException:服务器返回 HTTP 响应代码:415 用于 URL: http ://www.dataaccess.com/webservicesserver/numberconversion.wso/NumberToWords 在 principal.PruebaWS。 getNumber(PruebaWS.java:83) at principal.Main.main(Main.java:6) 原因:java.io.IOException:服务器返回 HTTP 响应代码:415 用于 URL: http ://www.dataaccess.com/ webservicesserver/numberconversion.wso/NumberToWords 在 java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1919) 在 java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1515)在 principal.PruebaWS.getNumber(PruebaWS.java:67) ... 1 more C:\Local\NetBeans\Cache\11.1\executor-snippets\run.xml:111:执行此行时出现以下错误:C: \Local\NetBeans\Cache\11.1\executor-snippets\run.xml:68:Java 返回:1 BUILD FAILED(总时间:2 秒)
任何帮助都是有价值的。
解决方案
好的,所以在调查了很长一段时间后,我发现这个错误与它自己的 web 服务有关,我将它与另一个交换,它没有任何问题。经验教训:并非所有网络服务都可以正常工作。
推荐阅读
- java - 问一个关于http请求头的问题:connections: keep alive
- c - Visual Studio 2019 中的乱码字符
- c# - System.Text.Json 抛出 TypeInitializationError
- linux - opensuse 13 企业 crontab 不会执行 jar 文件
- python - 使用 Python 和 Paramiko 连接到自定义 SSH 子系统(HP NonStop 上的 TACL 进程)
- java - 如何在注释处理器中访问封闭元素的变量注释?
- android - 使用 Google 登录无法在 Android 上运行(仅在 iOS 上) - Flutter
- xamarin - 当我使用对象属性(get-set)时,Xamarin 表单崩溃的 android 项目
- azure - Azure API 获取一段时间的费用
- javascript - 输出媒体输出到 2 个目录而不是 1 个