【问题标题】:Calling SOAP service returns WSDL调用 SOAP 服务返回 WSDL
【发布时间】:2017-03-21 11:19:48
【问题描述】:

我正在尝试调用 VisualSoft Soap Test WS .. 但每次我尝试执行请求时 .. 它都会返回它们的默认 WSDL 尽管如果我使用外部工具 SOAP 工作正常用于测试。

我犯了什么错误? :

代码:

public static void main(String args[]) throws Exception {
    try {
        // Create SOAP Connection
        SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
        SOAPConnection soapConnection = soapConnectionFactory.createConnection();

        // Send SOAP Message to SOAP Server.
        String url = "https://demo.visualsoft.co.uk/api/soap/wsdl/3";

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

        // Process the SOAP Response
        printSOAPResponse(soapResponse);

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

}



private static SOAPMessage createSOAPRequest() throws Exception {
    String xml = "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns1=\"http://demo.visualsoft.co.uk/api/soap/service\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><SOAP-ENV:Header><ns1:VSAuth><ClientID>testclient</ClientID><Username>testuser</Username><Password>testpass</Password></ns1:VSAuth></SOAP-ENV:Header><SOAP-ENV:Body><ns1:HelloWorld/></SOAP-ENV:Body></SOAP-ENV:Envelope>";

    MessageFactory messageFactory = MessageFactory.newInstance();
    InputStream is = new ByteArrayInputStream(xml.getBytes(Charset.forName("UTF-8")));
    MimeHeaders Headers = new MimeHeaders();

    SOAPMessage soapMessage = messageFactory.createMessage(Headers, is);
    soapMessage.writeTo(System.out);

    return soapMessage;
}

private static String convertDocumentToString(Document doc) {
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer transformer;
    try {
        transformer = tf.newTransformer();
        StringWriter writer = new StringWriter();
        transformer.transform(new DOMSource(doc), new StreamResult(writer));
        String output = writer.getBuffer().toString();
        return output;
    } catch (TransformerException e) {
        e.printStackTrace();
    }

    return null;
}

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

有关 SOAP 的更多详细信息:https://demo.visualsoft.co.uk/api/soap#WSDL

【问题讨论】:

    标签: java soap soap-client saaj


    【解决方案1】:

    请求应发送到https://demo.visualsoft.co.uk/api/soap/service/3,如 WSDL 的 service 中所示。

    【讨论】:

    • Thaaaaanks !... 亲爱的再问一次,有没有办法像在 PHP 上的示例一样在 Java 中处理 SoapClient?我的意思是将操作和参数仅作为参数传递,而不是发送整个 XML 格式?
    【解决方案2】:

    在我的示例底部,标题为“Java Client for Weather service open source webservice avaliable on http://www.webserviceX.NET”解释了如何在 java 中调用 webservice 和构建soap request xml:

     package com.test.ws.example;
    
     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;
    
     /*
      * WSDL url :  http://www.webservicex.com/globalweather.asmx?WSDL
      * Endpoint URL: http://www.webservicex.com/globalweather.asmx   */
    
     public class WSClient {
    
       public static void main(String args[]) {
    
        try {
            SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
            SOAPConnection soapConnection = soapConnectionFactory.createConnection();
    
            // Generate SOAP request XML
    
            MessageFactory messageFactory = MessageFactory.newInstance();
            SOAPMessage soapMessage = messageFactory.createMessage();
            MimeHeaders header = soapMessage.getMimeHeaders();
            header.setHeader("SOAPAction", "http://www.webserviceX.NET/GetCitiesByCountry");
            SOAPPart soapPart = soapMessage.getSOAPPart();
            SOAPEnvelope envelope = soapPart.getEnvelope();
            envelope.addNamespaceDeclaration("web", "http://www.webserviceX.NET");
            SOAPBody soapBody = envelope.getBody();
            SOAPElement soapBodyElem = soapBody.addChildElement("GetCitiesByCountry", "web");
            SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("CountryName", "web");
            soapBodyElem1.addTextNode("INDIA");
            soapMessage.saveChanges();
            soapMessage.writeTo(System.out);
    
    
            // Call webservice endpint
            String url = "http://www.webservicex.com/globalweather.asmx";
            SOAPMessage soapResponse = soapConnection.call(soapMessage, url);
            Source sourceContent = soapResponse.getSOAPPart().getContent();
    
            // Print SOAP response
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            System.out.println("Response SOAP Message \n");
            StreamResult result = new StreamResult(System.out);
            transformer.transform(sourceContent, result);
            soapConnection.close();
    
        } catch (Exception e) {
    
            e.printStackTrace();
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多