0

私はWebサービスを初めて使用します。

xmlをplog.asmxというaspxWebサービスに渡す必要があります

これが私のコードです

String xmldata = "<?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/\" >" +
              "<![CD[<soap:Body>" +
              "<SubmitJob xmlns=\"http://www.xdel.biz/XWS/\"> " +
              "<APIKey>"+ API_KEY +"</APIKey>" +
              "<Job>" +
               "<Customer_Name>"+ Customer_Name +"</Customer_Name>" +
               "<Address1>"+ Address1 +"</Address1>" +
                "<Address2>"+ Address2 +"</Address2>" +
                "<Postal_Code>"+ Postal_Code +"</Postal_Code>" +
                "<Phone_Number>"+ Phone_Number +"</Phone_Number>" +
                "<Mobile_Number>"+ Mobile_Number +"</Mobile_Number>" +
                "<Order_Reference>"+ Order_Reference +"</Order_Reference>" +
                "<Delivery_Instructions>"+ Delivery_Instructions +"</Delivery_Instructions>" +
              "</Job>]]>" +
            "</SubmitJob>" +
              "</soap:Body>]]>" +
              "</SOAP:Envelope>";

             System.out.println(xmldata); 


              try{
                  //Create socket
                  String hostname = "www.xdel.biz";
                  int port = 80;
                  InetAddress  addr = InetAddress.getByName(hostname);                    
                  Socket sock = new Socket(addr, port);
                  System.out.println(sock.toString());                    

                  //Send header
                  String path = "/xws/plog.asmx";
                  BufferedWriter  wr = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream(),"UTF-8"));
                  // You can use "UTF8" for compatibility with the Microsoft virtual machine.
                  wr.write("POST " + path + " HTTP/1.1\r\n");
                  wr.write("Host: www.xdel.biz\r\n");
                  wr.write("Content-Type: text/xml; charset=utf-8\r\n");
                  wr.write("Content-Length: " + xmldata.length() + "\r\n");                   
                  wr.write("SOAPAction: \"http://www.xdel.biz/XWS/SubmitJob\" \r\n");
                  wr.write("\r\n");

                  //Send data
                  wr.write(xmldata);
                  wr.flush();

                  System.out.println("1");

                  // Response
                  BufferedReader rd = new BufferedReader(new InputStreamReader(sock.getInputStream()));
                  String line;
                  while((line = rd.readLine()) != null){
                      System.out.println(line);
                  }

                } catch (Exception e) {
                  e.printStackTrace();
                }

コードを実行すると、次のようなエラーが発生しました

HTTP / 1.1 400 Bad Request Cache-Control:private Content-Type:text / xml; charset = utf-8サーバー:Microsoft-IIS / 7.5 X-AspNet-バージョン:4.0.30319 X-Powered-By:ASP.NET日付:2012年12月13日木曜日09:37:12 GMTコンテンツ-長さ:0

エラーをググって修正しようとしましたが、解決策が出ません。

4

4 に答える 4

0

良いアイデアは、SOAP Webサービスを実装し、すでにテストされているAPIを使用することです。

この JAX-WSを使用しました

プロトコル(SOAPまたはHTTP)が一致しない場合、400BadRequestが発生することがあります

于 2012-12-13T10:11:39.413 に答える
0

使ってみてはいかがでしょ<![CD[<soap:Body></soap:Body>]]>うか without ![CD[ ]] block

于 2012-12-13T10:23:32.807 に答える
0

私はすでに「BadRequest」がWebサービスを消費していました。問題は、ほぼ1日で答えを探した後、消費されたXMLのサイズ、消費されたSOAPメッセージのサイズであることがわかりました。問題は、消費するWebサービスを提供するアプリケーションを、大きなXMLデータを受信するように設定する必要があることです。クライアントからSOAPメッセージを受信するために使用するバッファーのサイズを増やすために、アプリケーションサーバーを拡張するように構成する必要がありました。 。

それが私たちの失効でした。少しお役に立てば幸いです。

于 2013-01-23T20:07:52.647 に答える
0

私はと同じ問題を抱えていましたHttpURLConnection。以下の2つのプロパティを追加すると、400BadRequestの問題が解決しました。

  1. httpConn.setRequestProperty("Content-Type","text/xml; charset=utf-8");
  2. httpConn.setRequestProperty("soapAction", soapAction);

注:このエラーは通常、応答を読み取ろうとしたときに表示されます。

于 2013-05-09T18:44:14.267 に答える