从WebService检索响应消息

时间:2015-07-07 12:48:39

标签: java web-services sockets


在NetBeans中,我必须使用以下代码:

    public String launchRequest(String paramString)
       {
       URL localURL = new URL(paramString);
       Object localObject1 = new Socket(localURL.getHost(),  localURL.getPort());

       Object localObject2 = "GET " + paramString + " HTTP/1.0";
       localObject2 = (String)localObject2 + "\r\nAccept value: */*\r\n";
       localObject2 = (String)localObject2 + "Host value: " + localURL.getHost() + ":" + localURL.getPort() + "\r\n";
       Object localObject3 = new PrintWriter(((Socket)localObject1).getOutputStream(), true);
       ((PrintWriter)localObject3).println((String)localObject2);
       ((PrintWriter)localObject3).close();
       ((Socket)localObject1).close();

      return "OK";}

这段代码应该调用在C#中创建的webService,它在Oracle数据库中进行插入操作。
传递的网址如下所示:
http://192.168.88.29:443/RaduPestrea/Services/Ort.asmx/ORTRequest?callBackDisabled=true&siren=328812656&capId=1325369
问题是没有调用webService。 getOutputStream()返回一个没有来自WebService的消息的OutputStream。 这是webService的一部分:
        namespace Services { /// /// Summary description for Service1. /// public class Ort : System.Web.Services.WebService { [WebMethod] public string ORTRequest(bool callBackDisabled, int siren, int capId) { Try{ ....... return "Success ReqId :" + reqNum; Catch(Exception ex) { return ex.ToString(); } } }
问题是我无法修改此代码。我希望问题来自我发送的URL。
任何帮助表示赞赏。谢谢。

编辑:同意这不是最漂亮的代码。任务是,Java代码需要从该URL链接调用WebService。该链接应该在数据库中进行插入。数据库中没有新记录。我使用WebService的return语句来确保它被调用但没有返回任何内容。我可能做错了,无论如何检查WebService是否已被成功调用?

如果我使用以下代码,则调用Web服务并在数据库中插入新记录。

<code>
    localURL = new URL(paramString);        
    localObject1 = "";        
    localObject2 = localURL.openStream();
    localObject3 = new InputStreamReader((InputStream)localObject2);
    BufferedReader localBufferedReader = new BufferedReader((Reader)localObject3);
    String str1;
    while ((str1 = localBufferedReader.readLine()) != null)
    {
      String str2 = "";
      localObject1 = (String)localObject1 + str2;
    }
    return (String)localObject1;
</code>

2 个答案:

答案 0 :(得分:0)

首先,使用Socket发出HTTP请求是个坏主意。最好使用现有的库类/方法;例如:

new URL("https://example.com/foo/bar?param=xxx").openConnection();

这为您提供了一些URLConnnection的子类,您可以使用它来形成请求并从服务器获取回复

有用于发出HTTP / HTTPS请求的备用库。例如,如果您的要求很复杂,Apache HttpComponents库可能是一个不错的选择。

但是,我怀疑你从你的请求中得不到任何回报的真正原因是,你正试图与&#34; https&#34;服务器(端口443),不使用SSL / TLS连接。那不会起作用。服务器可能只是关闭套接字。

虽然可以通过普通Socket(理论上)建立SSL / TLS连接或使用SSLSocket,但使用正确形成的&#34; https:/更简单/..."网址和(例如)URL.openConnection()如上所述。

除此之外,您所请求的请求中的标题行在语法上看起来无效。两个

    Accept value: ...

    Host value: ....

错了。如果您真的想自己实现HTTP消息处理,则需要阅读HTTP 1.1规范,并将其实现到该字母。

最后(正如@EJP指出的那样)你的代码甚至没有阅读回复。写入OutputStream不会&#34;返回&#34;任何东西。您需要阅读InputStream的响应...即使只是检查请求是否被接受。

答案 1 :(得分:0)

  

问题是没有调用webService。

您还没有提供任何相关证据,也无法从您发布的代码中得知。

  

getOutputStream()返回一个没有来自WebService的消息的OutputStream。

这没有意义。 u(9) #[1] 10 sink("NUL") u(9) sink() u(9) #[1] 10 不包含来自对等方的消息。它们用于将消息发送到对等体。这个陈述和你的头衔是完全没有意义的。

  

无论如何都要检查WebService是否已成功调用?

是。 阅读回复并返回而不是硬连线OutputStreams

而你刚刚发布了完全相同的代码。

  

同意它不是最漂亮的代码。

它甚至不是正确的代码。 HTTP标头无效,并且不会尝试读取响应。它只是无能。使用您发布的HttpURLConnection代码。