如何发送 soap xml 请求和读取响应

问题描述 投票:0回答:1

我用 java 创建了代码,它发送 soap xml 请求并且应该读取响应但是我收到了这些错误 内部服务器错误:

java.io.IOException:服务器返回 HTTP 响应代码:URL 为 500:https://test.api.system.simplyclub.co.il/TerminalService.asmx?op=UserAccountLogin.

可能是什么问题?

 package com.test.com;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class Send_Xml {
    
 public static void main(String[] args) {
    

     try {
         String url = "https://test.api.system.simplyclub.co.il/TerminalService.asmx?op=UserAccountLogin";
         URL obj = new URL(url);
         HttpURLConnection con = (HttpURLConnection) obj.openConnection();
         con.setRequestMethod("POST");
         con.setRequestProperty("Content-Type","text/xml; charset=utf-8");
         String xml = 
         "<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>"+
         "<soap:Envelope xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns:xsd=\\\"http://www.w3.org/2001/XMLSchema\\\" xmlns:soap=\\\"http://schemas.xmlsoap.org/soap/envelope/\\\">"+
         "<soap:Body>"+
         "<UserAccountLogin xmlns=\\\"http://tempuri.org/\\\">"+
         "<account>"+
         "<VendorApiKey>string</VendorApiKey>"+
         "<User>string</User>"+
         "<Password>string</Password>"+
         "</account>"+
         "<additionalInfo>"+
         "<FieldData>"+
         "<FieldId>string</FieldId>"+
         "<FieldValue>string</FieldValue>"+
         "</FieldData>"+
         "<FieldData>"+
         "<FieldId>string</FieldId>"+
         "<FieldValue>string</FieldValue>"+
         "</FieldData>"+
         "</additionalInfo>"+
         "</UserAccountLogin>"+
         "</soap:Body>"+
         "</soap:Envelope>";
         con.setDoOutput(true);
         DataOutputStream wr = new DataOutputStream(con.getOutputStream());
         wr.writeBytes(xml);
         wr.flush();
         wr.close();
         String responseStatus = con.getResponseMessage();
         System.out.println(responseStatus);
         BufferedReader in = new BufferedReader(new InputStreamReader(
         con.getInputStream()));
         String inputLine;
         StringBuffer response = new StringBuffer();
         while ((inputLine = in.readLine()) != null) {
         response.append(inputLine);
         }
         in.close();
         System.out.println("response:" + response.toString());
         } catch (Exception e) {
         System.out.println(e);
         }
         }
        }
java xml api post
1个回答
0
投票

内部服务器错误是什么意思...

是一个HTTP响应状态码:

“HyperText Transfer Protocol (HTTP) 500 Internal Server Error 服务器错误响应代码表示服务器遇到了阻止它完成请求的意外情况。”

来源

在 JAVA ...

这不是 Java 错误。它是您与之通话的服务器返回的响应代码。而且该服务器不一定是用 Java 实现的。

以及如何解决这个问题?

这是棘手的部分。您可以采取三种方法:

  1. HTTP 响应通常有一个正文。对于错误响应(4xx 或 5xx),响应正文may 包含可帮助您找出问题所在的信息。

    尝试阅读

    con.getErrorStream()
    而不是
    con.getOutpuStream()

  2. 如果您拥有/管理服务器,您应该检查服务器日志文件。它们可能包含错误消息、堆栈跟踪等,可帮助您找出问题所在。

  3. 如果您无权访问服务器日志,您可以尝试联系站点管理员。

一旦您了解了原因,您就可以修复服务器端错误,或者想出如何避免它。例如,您可能通过发送格式错误的请求触发了错误。但是我们不能在没有看到诊断信息的情况下告诉您问题是什么或如何解决它。

话虽如此......你在这一行中双重转义

"
s有什么原因吗(例如):

  "<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>" +
© www.soinside.com 2019 - 2024. All rights reserved.