2017-03-21 36 views
0

VisualSoft Soap Test WS ..를 호출하려고하는데 요청을 실행할 때마다 ... WSDL 외부 도구를 사용하면 SOAP가 제대로 작동하지만 시험용 .SOAP 서비스를 호출하면 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); 
} 

상세 정보 : https://demo.visualsoft.co.uk/api/soap#WSDL는 WSDL의 service에 표시된대로 요청이 https://demo.visualsoft.co.uk/api/soap/service/3로 전송한다

답변

1

. "http://www.webserviceX.NET에 날씨 서비스 오픈 소스 웹 서비스에 사용 가능한 자바 클라이언트"이 제목

+0

Thaaaaanks ... 한 번 더 친애하는 질문, PHP에서 샘플처럼 Java에서 SoapClient를 처리 할 수있는 방법이 있습니까? 나는 전체 XML 형식을 보내는 대신 매개 변수로만 연산과 인수를 전달한다는 의미인가? – Jason4Ever

0

아래 내 샘플 웹 서비스 및 전화 자바 비누 요청 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(); 
    } 
    } 
}