Java HTTPURLConnection-空响应

Java HTTPURLConnection-空响应,java,ajax,xml,Java,Ajax,Xml,这可能是一个常见的问题,但我想不出来 我有一个URL,如果我将其插入浏览器,它将返回预期的票证详细信息,因此我知道它正在工作: https://www.myconnectwise.net/v4_6_release/services/system_io/integration_io/processClientAction.rails?actionString=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-16%22%3F%3E%0A%3CG

这可能是一个常见的问题,但我想不出来

我有一个URL,如果我将其插入浏览器,它将返回预期的票证详细信息,因此我知道它正在工作:

https://www.myconnectwise.net/v4_6_release/services/system_io/integration_io/processClientAction.rails?actionString=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-16%22%3F%3E%0A%3CGetTicketAction%20xmlns%3Axsi%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchemainstance%22%20xmlns%3Axsd%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema%22%3E%0A%3CCompanyName%3Exxxxxxx%3C%2FCompanyName%3E%3CIntegrationLoginId%3Exxxxxx%3C%2FIntegrationLoginId%3E%3CIntegrationPassword%3Exxxxxx%3C%2FIntegrationPassword%3E%0A%3CSrServiceRecid%3E1921%3C%2FSrServiceRecid%3E%3C%2FGetTicketAction%3E
对于更可读的版本,请使用以下URL:

https://www.myconnectwise.net/v4_6_release/services/system_io/integration_io/processClientAction.rails
其次是:

?actionString=
然后是以下xml:

<?xml version="1.0" encoding="utf-16"?>
<GetTicketAction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CompanyName>xxxx</CompanyName><IntegrationLoginId>xxxx</IntegrationLoginId><IntegrationPassword>xxxx</IntegrationPassword>
<SrServiceRecid>1921</SrServiceRecid></GetTicketAction>
在这一行:

System.out.println(line);
这是所有的代码。如您所见,我已尝试将serverParameters设置为URL编码字符串和xml字符串:

package com.google.gwt.HelpDeskTest.server;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.google.gwt.HelpDeskTest.client.HelpDeskTestService;
import com.google.gwt.HelpDeskTest.shared.HelpDeskTestException;


@SuppressWarnings("serial")
public class HelpDeskTestImpl extends RemoteServiceServlet implements
    HelpDeskTestService {

@Override
public String postToRemoteServer(String serviceUrl)
        throws HelpDeskTestException {

    try {

        final String serverPath = "https://www.myconnectwise.net/v4_6_release/services/system_io/integration_io/processClientAction.rails";

        System.out.println(serverPath);


        //DO I need to URL encode this???
        //I’ve tried this:
        //final String serverParameters= "%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-16%22%3F%3E%0A%3CGetTicketAction%20xmlns%3Axsi%3D%22http%3A%2F%2F" +
        //"www.w3.org%2F2001%2FXMLSchema-instance%22%20xmlns%3Axsd%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema%22%3E%0A%3CCompanyName" + 
        //"%3Exxxxx%3C%2FCompanyName%3E%3CIntegrationLoginId%3Exxxxx%3C%2FIntegrationLoginId%3E%3CIntegrationPassword%3Exxxxx%3C%2F" + 
        //"IntegrationPassword%3E%0A%3CSrServiceRecid%3E1921%3C%2FSrServiceRecid%3E%3C%2FGetTicketAction%3E";

        final String serverParameters="<?xml version=%221.0%22 encoding=%22utf-16%22?><GetTicketAction xmlns:xsi=%22http://www.w3.org/2001/XMLSchema-instance%22 xmlns:xsd=%22http://www.w3.org/2001/XMLSchema%22><CompanyName>xxxx</CompanyName><IntegrationLoginId>xxxx</IntegrationLoginId><IntegrationPassword>xxxx</IntegrationPassword><SrServiceRecid>1921</SrServiceRecid></GetTicketAction>";

        System.out.println(serverParameters);


        //Open HttpURLConnection:           

        URL url = new URL(serverPath); 
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();   

        connection.setConnectTimeout(10000); //added this to see if I can address the timeout issue.
        connection.setReadTimeout(10000);
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setInstanceFollowRedirects(false); 
        connection.setRequestMethod("POST"); 
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        connection.setRequestProperty("charset", "utf-16");
        connection.setRequestProperty("Content-Length", "" + Integer.toString(serverParameters.getBytes().length));
        connection.setUseCaches (false);

        DataOutputStream wr = new DataOutputStream(connection.getOutputStream ());
        wr.writeBytes(serverParameters);
        wr.flush();
        wr.close();

        //process response - need to get xml response back.
        InputStream stream = connection.getInputStream();

        //put output stream into a string
        BufferedReader br = new BufferedReader(new InputStreamReader(stream,"utf-16"));
        String result = "";
        String line;
        while ((line = br.readLine()) != null) {
        System.out.println(line);
           result+= line;
        }

        br.close();
        connection.disconnect();

        System.out.println(result);

       return result;

    }  catch (final Exception e) {
        System.out.println(e.getMessage());
        throw new HelpDeskTestException();
        //handle timeout error

    }
}

}
package com.google.gwt.HelpDeskTest.server;
导入java.io.BufferedReader;
导入java.io.DataOutputStream;
导入java.io.File;
导入java.io.FileReader;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入com.google.gwt.user.server.rpc.RemoteServiceServlet;
导入com.google.gwt.HelpDeskTest.client.HelpDeskTestService;
导入com.google.gwt.HelpDeskTest.shared.HelpDeskTestException;
@抑制警告(“串行”)
公共类HelpDeskTestImpl扩展了RemoteServiceServlet实现
HelpDeskTestService{
@凌驾
公共字符串postToRemoteServer(字符串服务URL)
抛出HelpDeskTestException{
试一试{
最终字符串serverPath=”https://www.myconnectwise.net/v4_6_release/services/system_io/integration_io/processClientAction.rails";
System.out.println(服务器路径);
//我需要对这个进行URL编码吗???
//我试过这个:
//最终字符串serverParameters=“%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-16%22%3F%3E%0A%3CGetTicketAction%20xmlns%3Axsi%3D%22http%3A%2F%2F”+
//“www.w3.org%2F2001%2FXMLSchema实例%22%20xmlns%3Axsd%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema%22%3E%0A%3CCompanyName”+
//%3Exxxxx%3C%2CompanyName%3E%3CIntegrationLoginId%3Exxxxx%3C%2IntegrationLoginId%3E%3CIntegrationPassword%3Exxxxx%3C%2F“+
//“集成密码%3E%0A%3CSrServiceRecid%3E1921%3C%2FSrServiceRecid%3E%3C%2FGetTicketAction%3E”;
最终字符串serverParameters=“xxxxxxxxxxx 1921”;
System.out.println(服务器参数);
//打开HttpURLConnection:
URL=新URL(服务器路径);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setConnectTimeout(10000);//添加此选项以查看是否可以解决超时问题。
connection.setReadTimeout(10000);
connection.setDoOutput(真);
connection.setDoInput(true);
connection.setInstanceFollowDirections(false);
connection.setRequestMethod(“POST”);
connection.setRequestProperty(“内容类型”、“应用程序/x-www-form-urlencoded”);
setRequestProperty(“字符集”、“utf-16”);
connection.setRequestProperty(“Content Length”,“Integer.toString(serverParameters.getBytes().Length));
connection.setUseCaches(false);
DataOutputStream wr=新的DataOutputStream(connection.getOutputStream());
writeBytes(服务器参数);
wr.flush();
wr.close();
//流程响应-需要返回xml响应。
InputStream=connection.getInputStream();
//将输出流放入字符串中
BufferedReader br=新的BufferedReader(新的InputStreamReader(流,“utf-16”));
字符串结果=”;
弦线;
而((line=br.readLine())!=null){
系统输出打印项次(行);
结果+=行;
}
br.close();
连接断开();
系统输出打印项次(结果);
返回结果;
}捕获(最终异常e){
System.out.println(e.getMessage());
抛出新的HelpDeskTestException();
//句柄超时错误
}
}
}

我得到了“服务器返回的HTTP响应代码:500,用于URL:myconnectwise.net/v4\u 6\u release/services/system\u io/…;在执行代码之后。 所以检查服务器(500-内部服务器错误)。
并在将结果解析为XML之前分析响应代码。

在执行代码之后,我得到了“服务器返回的HTTP响应代码:500 for URL:”。所以检查服务器(500-内部服务器错误)。并在将结果解析为XML之前分析响应代码。@DmitryTsechoev谢谢。这为我指明了正确的方向。我带回了回复代码,正如你说的是500。我将包含xml的整个URL放入serverPath变量,现在得到的响应代码是200。然而,当我看到line变量中返回的内容时,它似乎是一个汉字字符串(事实上Google Translate将其识别为汉字)。你知道为什么会这样吗?好的,这是可行的!我替换了这一行:“BufferedReader br=new BufferedReader(new InputStreamReader(流,“utf-16”);”对于这一个:'BufferedReader br=newBufferedReader(newInputStreamReader(流,“utf-8”);'现在我得到的是xml,而不是汉字@DmitryTsechoev你能把你的评论写在一个答案里吗?我会把它标记为已回答?谢谢。我补充了我的评论作为回答。很高兴你成功了​​信息技术谢谢你!祝你好运
package com.google.gwt.HelpDeskTest.server;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.google.gwt.HelpDeskTest.client.HelpDeskTestService;
import com.google.gwt.HelpDeskTest.shared.HelpDeskTestException;


@SuppressWarnings("serial")
public class HelpDeskTestImpl extends RemoteServiceServlet implements
    HelpDeskTestService {

@Override
public String postToRemoteServer(String serviceUrl)
        throws HelpDeskTestException {

    try {

        final String serverPath = "https://www.myconnectwise.net/v4_6_release/services/system_io/integration_io/processClientAction.rails";

        System.out.println(serverPath);


        //DO I need to URL encode this???
        //I’ve tried this:
        //final String serverParameters= "%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-16%22%3F%3E%0A%3CGetTicketAction%20xmlns%3Axsi%3D%22http%3A%2F%2F" +
        //"www.w3.org%2F2001%2FXMLSchema-instance%22%20xmlns%3Axsd%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema%22%3E%0A%3CCompanyName" + 
        //"%3Exxxxx%3C%2FCompanyName%3E%3CIntegrationLoginId%3Exxxxx%3C%2FIntegrationLoginId%3E%3CIntegrationPassword%3Exxxxx%3C%2F" + 
        //"IntegrationPassword%3E%0A%3CSrServiceRecid%3E1921%3C%2FSrServiceRecid%3E%3C%2FGetTicketAction%3E";

        final String serverParameters="<?xml version=%221.0%22 encoding=%22utf-16%22?><GetTicketAction xmlns:xsi=%22http://www.w3.org/2001/XMLSchema-instance%22 xmlns:xsd=%22http://www.w3.org/2001/XMLSchema%22><CompanyName>xxxx</CompanyName><IntegrationLoginId>xxxx</IntegrationLoginId><IntegrationPassword>xxxx</IntegrationPassword><SrServiceRecid>1921</SrServiceRecid></GetTicketAction>";

        System.out.println(serverParameters);


        //Open HttpURLConnection:           

        URL url = new URL(serverPath); 
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();   

        connection.setConnectTimeout(10000); //added this to see if I can address the timeout issue.
        connection.setReadTimeout(10000);
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setInstanceFollowRedirects(false); 
        connection.setRequestMethod("POST"); 
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        connection.setRequestProperty("charset", "utf-16");
        connection.setRequestProperty("Content-Length", "" + Integer.toString(serverParameters.getBytes().length));
        connection.setUseCaches (false);

        DataOutputStream wr = new DataOutputStream(connection.getOutputStream ());
        wr.writeBytes(serverParameters);
        wr.flush();
        wr.close();

        //process response - need to get xml response back.
        InputStream stream = connection.getInputStream();

        //put output stream into a string
        BufferedReader br = new BufferedReader(new InputStreamReader(stream,"utf-16"));
        String result = "";
        String line;
        while ((line = br.readLine()) != null) {
        System.out.println(line);
           result+= line;
        }

        br.close();
        connection.disconnect();

        System.out.println(result);

       return result;

    }  catch (final Exception e) {
        System.out.println(e.getMessage());
        throw new HelpDeskTestException();
        //handle timeout error

    }
}

}