在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>
答案 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代码。