2017-02-16 13 views
0

Я пытаюсь отправить запрос на http://www.webservicex.com/globalweather.asmxКак исправить Invalid Content-Type: Текст/HTML в клиенте SOAP с помощью Java

Я попытался запустить этот SOAP WebService вызова, но получаю ошибку ниже. Где я могу изменить тип контекста

import javax.xml.soap.MessageFactory; 
import javax.xml.soap.SOAPBody; 
import javax.xml.soap.SOAPConnection; 
import javax.xml.soap.SOAPConnectionFactory; 
import javax.xml.soap.SOAPElement; 
import javax.xml.soap.SOAPEnvelope; 
import javax.xml.soap.SOAPMessage; 
import javax.xml.soap.SOAPPart; 
import javax.xml.transform.Source; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.stream.StreamResult; 


public class Main2 
{ 

     private static SOAPMessage createSOAPRequest() throws Exception 
     { 
       MessageFactory messageFactory = MessageFactory.newInstance(); 
       SOAPMessage soapMessage = messageFactory.createMessage(); 
       SOAPPart soapPart = soapMessage.getSOAPPart(); 


       // SOAP Envelope 
       SOAPEnvelope envelope = soapPart.getEnvelope(); 
       envelope.addNamespaceDeclaration("web", "http://www.webserviceX.NET"); 

       // SOAP Body 
       SOAPBody soapBody = envelope.getBody(); 
       SOAPElement soapBodyElem = soapBody.addChildElement("GetCitiesByCountry", "web"); 
       SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("CountryName", "web"); 
       soapBodyElem1.addTextNode("Brazil"); 

       soapMessage.saveChanges(); 

       // Check the input 
       System.out.println("Request SOAP Message = "); 
       soapMessage.writeTo(System.out); 
       System.out.println(); 
       return soapMessage; 
     } 

     /** 
     * Method used to print the SOAP Response 
     */ 
     private static void printSOAPResponse(SOAPMessage soapResponse) throws Exception 
     { 
       TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
       Transformer transformer = transformerFactory.newTransformer(); 
       Source sourceContent = soapResponse.getSOAPPart().getContent(); 
       System.out.println("\nResponse SOAP Message = "); 
       StreamResult result = new StreamResult(System.out); 
       transformer.transform(sourceContent, result); 
     } 

     /** 
     * Starting point for the SAAJ - SOAP Client Testing 
     */ 
     public static void main(String args[]) 
     { 
       try 
       { 
         SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance(); 
         SOAPConnection soapConnection = soapConnectionFactory.createConnection(); 

         String url = "http://www.dneonline.com/calculator.asmx?WSDL"; 
         SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), url); 

         soapConnection.close(); 
       } 
       catch (Exception e) 
       { 
         System.err.println("Error occurred while sending SOAP Request to Server"); 
         e.printStackTrace(); 
       } 
     } 
} 

Вот вывод в консоли:

Request SOAP Message = 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://www.webserviceX.NET"><SOAP-ENV:Header/><SOAP-ENV:Body><web:GetCitiesByCountry><web:CountryName>Brazil</web:CountryName></web:GetCitiesByCountry></SOAP-ENV:Body></SOAP-ENV:Envelope> 
Feb 16, 2017 8:54:40 PM com.sun.xml.internal.messaging.saaj.soap.MessageImpl identifyContentType 
SEVERE: SAAJ0537: Invalid Content-Type. Could be an error message instead of a SOAP message 
Error occurred while sending SOAP Request to Server 
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Invalid Content-Type:text/html. Is this an error message instead of a SOAP response? 
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:148) 
    at com.hpe.snow.utils.snowwstester.Main2.main(Main2.java:109) 
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Invalid Content-Type:text/html. Is this an error message instead of a SOAP response? 
    at com.sun.xml.internal.messaging.saaj.soap.MessageImpl.identifyContentType(MessageImpl.java:602) 
    at com.sun.xml.internal.messaging.saaj.soap.MessageFactoryImpl.createMessage(MessageFactoryImpl.java:86) 
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:328) 
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:144) 
    ... 1 more 

CAUSE: 

com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Invalid Content-Type:text/html. Is this an error message instead of a SOAP response? 
    at com.sun.xml.internal.messaging.saaj.soap.MessageImpl.identifyContentType(MessageImpl.java:602) 
    at com.sun.xml.internal.messaging.saaj.soap.MessageFactoryImpl.createMessage(MessageFactoryImpl.java:86) 
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:328) 
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:144) 
    at com.hpe.snow.utils.snowwstester.Main2.main(Main2.java:109) 

CAUSE: 

com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Invalid Content-Type:text/html. Is this an error message instead of a SOAP response? 
    at com.sun.xml.internal.messaging.saaj.soap.MessageImpl.identifyContentType(MessageImpl.java:602) 
    at com.sun.xml.internal.messaging.saaj.soap.MessageFactoryImpl.createMessage(MessageFactoryImpl.java:86) 
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:328) 
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:144) 
    at com.hpe.snow.utils.snowwstester.Main2.main(Main2.java:109) 

Что нужно добавить? Или отредактирован?

UPDATE

Я вставил

 soapBodyElem1.addTextNode("Brazil"); 

     MimeHeaders headers = soapMessage.getMimeHeaders(); 
     headers.addHeader("Content-Type", "application/html"); 


     soapMessage.saveChanges(); 

но я получил ошибку

com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection post 
SEVERE: SAAJ0010: Unable to read response 
java.net.SocketException: Software caused connection abort: recv failed 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.read(SocketInputStream.java:129) 
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) 
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:258) 
    at java.io.BufferedInputStream.read(BufferedInputStream.java:317) 
    at sun.net.www.MeteredStream.read(MeteredStream.java:116) 
    at java.io.FilterInputStream.read(FilterInputStream.java:116) 
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2707) 
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2702) 
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.readFully(HttpSOAPConnection.java:567) 
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:314) 
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:144) 
    at com.hpe.snow.utils.snowwstester.Main2.main(Main2.java:75) 
Error occurred while sending SOAP Request to Server 
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to read response: Software caused connection abort: recv failed 
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:148) 
    at com.hpe.snow.utils.snowwstester.Main2.main(Main2.java:75) 
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to read response: Software caused connection abort: recv failed 
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:338) 
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:144) 
    ... 1 more 

CAUSE: 

com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to read response: Software caused connection abort: recv failed 
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:338) 
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:144) 
    at com.hpe.snow.utils.snowwstester.Main2.main(Main2.java:75) 

CAUSE: 

com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to read response: Software caused connection abort: recv failed 
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:338) 
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:144) 
    at com.hpe.snow.utils.snowwstester.Main2.main(Main2.java:75) 
+0

Я не уверен, но у клиента вы должны установить тип содержимого тоже в rquest заголовке –

+0

https://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source = Интернет & CD = 2 & вед = 0ahUKEwiXoNCT15TSAhWHKo8KHQa9DHkQFggfMAE & URL = HTTP% 3A% 2F% 2Fstackoverflow.com% 2Fquestions% 2F22176769% 2Funsupported-контента типа текста равнинно-кодировок-изо-8859-1 & USG = AFQjCNFO47_Pe7LpyRg9ltS9wpzUTvsK8A & Sig2 = VzbTm7NMEGsem5_l_Qv7bQ & BVM = bv.147134024, d.c2I –

+0

Где я могу это выразить? – Newb

ответ

0

Я исправил проблемы в вашем коде здесь, как вы должны позвонить. Я тестировал и работал.

import javax.xml.soap.MessageFactory; 
    import javax.xml.soap.MimeHeaders; 
    import javax.xml.soap.SOAPBody; 
    import javax.xml.soap.SOAPConnection; 
    import javax.xml.soap.SOAPConnectionFactory; 
    import javax.xml.soap.SOAPElement; 
    import javax.xml.soap.SOAPEnvelope; 
    import javax.xml.soap.SOAPMessage; 
    import javax.xml.soap.SOAPPart; 
    import javax.xml.transform.Source; 
    import javax.xml.transform.Transformer; 
    import javax.xml.transform.TransformerFactory; 
    import javax.xml.transform.stream.StreamResult; 

    public class Main2 { 

     private static SOAPMessage createSOAPRequest() throws Exception { 
     MessageFactory messageFactory = MessageFactory.newInstance(); 
     SOAPMessage soapMessage = messageFactory.createMessage(); 

     SOAPPart soapPart = soapMessage.getSOAPPart(); 

     // SOAP Envelope 
     SOAPEnvelope envelope = soapPart.getEnvelope(); 

     envelope.addNamespaceDeclaration("web", "http://www.webserviceX.NET"); 

     // SOAP Body 
     SOAPBody soapBody = envelope.getBody(); 
     SOAPElement soapBodyElem = soapBody.addChildElement("GetCitiesByCountry", "web"); 
     SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("CountryName", "web"); 
     soapBodyElem1.addTextNode("Brazil"); 
     MimeHeaders header = soapMessage.getMimeHeaders(); 
     header.setHeader("SOAPAction", "http://www.webserviceX.NET/GetCitiesByCountry"); 

     soapMessage.saveChanges(); 

     // Check the input 
     System.out.println("Request SOAP Message = "); 
     soapMessage.writeTo(System.out); 

     return soapMessage; 
    } 

    /** 
    * Method used to print the SOAP Response 
    */ 
    private static void printSOAPResponse(SOAPMessage soapResponse) throws Exception { 
     TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
     Transformer transformer = transformerFactory.newTransformer(); 
     Source sourceContent = soapResponse.getSOAPPart().getContent(); 
     System.out.println("\nResponse SOAP Message = "); 
     StreamResult result = new StreamResult(System.out); 
     transformer.transform(sourceContent, result); 
    } 

    /** 
    * Starting point for the SAAJ - SOAP Client Testing 
    */ 
    public static void main(String args[]) { 
     try { 
      SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance(); 
      SOAPConnection soapConnection = soapConnectionFactory.createConnection(); 

      String url = "http://www.webservicex.com/globalweather.asmx"; 

      SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), url); 

      printSOAPResponse(soapResponse); 

      soapConnection.close(); 
     } catch (Exception e) { 
      System.err.println("Error occurred while sending SOAP Request to Server"); 

      e.printStackTrace(); 
     } 
    } 
} 
Смежные вопросы