简体   繁体   English

WSDL SOAP Web 服务 Java 客户端的错误 415

[英]Error 415 for WSDL SOAP Webservice Java client

this time i will be needing some help with an error that i can't find where is the problem.这次我需要一些帮助来解决我找不到问题所在的错误。

I developed a very simple java code to consume a web service but when I run it i'm getting this nasty error: "Caused by: java.io.IOException: Server returned HTTP response code: 415 for URL: http://www.dataaccess.com/webservicesserver/numberconversion.wso/NumberToWords" I developed a very simple java code to consume a web service but when I run it i'm getting this nasty error: "Caused by: java.io.IOException: Server returned HTTP response code: 415 for URL: http://www .dataaccess.com/webservicesserver/numberconversion.wso/NumberToWords"

Investigating about this error it said that this has something to do with the Content-Type not been supported, so downloaded SoapUI 5.6.0 to see what the WS was waiting for and it seems correct to me.调查此错误时,它说这与不支持 Content-Type 有关,因此下载了 SoapUI 5.6.0 以查看 WS 正在等待什么,这对我来说似乎是正确的。

Here is my code:这是我的代码:

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);
        }
    }
}

And this is the error during Runtime:这是运行时的错误:

Exception in thread "main" java.lang.RuntimeException: java.io.IOException: Server returned HTTP response code: 415 for URL: http://www.dataaccess.com/webservicesserver/numberconversion.wso/NumberToWords at principal.PruebaWS.getNumber(PruebaWS.java:83) at principal.Main.main(Main.java:6) Caused by: java.io.IOException: Server returned HTTP response code: 415 for URL: http://www.dataaccess.com/webservicesserver/numberconversion.wso/NumberToWords at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.Z93 Exception in thread "main" java.lang.RuntimeException: java.io.IOException: Server returned HTTP response code: 415 for URL: http://www.dataaccess.com/webservicesserver/numberconversion.wso/NumberToWords at principal.PruebaWS. getNumber(PruebaWS.java:83) at principal.Main.main(Main.java:6) Caused by: java.io.IOException: Server returned HTTP response code: 415 for URL: http://www.dataaccess.com/ webservicesserver/numberconversion.wso/NumberToWords在 java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.Z93 F725A07423FE1C889F448B33D21F46Z:1919) at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1515) at principal.PruebaWS.getNumber(PruebaWS.java:67)... 1 more C:\Local\NetBeans\Cache\11.1\executor-snippets\run.xml:111: The following error occurred while executing this line: C:\Local\NetBeans\Cache\11.1\executor-snippets\run.xml:68: Java returned: 1 BUILD FAILED (total time: 2 seconds) F725A07423FE1C889F448B33D21F46Z:1919) at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1515) at principal.PruebaWS.getNumber(PruebaWS.java:67)... 1 more C:\ Local\NetBeans\Cache\11.1\executor-snippets\run.xml:111: The following error occurred while executing this line: C:\Local\NetBeans\Cache\11.1\executor-snippets\run.xml:68: Java returned : 1 BUILD FAILED (总时间: 2 秒)

Any help will be valuable.任何帮助都是有价值的。

I ran into the same issue using Postman and was able to resolve.我使用 Postman 遇到了同样的问题并且能够解决。 Change the Content-Type header from application/xml to text/xml将 Content-Type header 从 application/xml 更改为 text/xml

Okay, so after investigating for quite some time I discovered that this error had something to do with the webservice it self, i swapped it with another and it worked with no issue.好的,所以在调查了很长一段时间后,我发现这个错误与它自己的 web 服务有关,我将它与另一个交换,它没有任何问题。 Lesson learned: NOT all webservices out there work as they should.经验教训:并非所有网络服务都可以正常工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM