SOAP-вызов через SSL с использованием Zend Framework - PullRequest
0 голосов
/ 15 марта 2012

Мне предоставили .wsdl-URI и пример Java (см. Ниже), и мне нужно сделать SOAP-вызовы через SSL и обработать ответ.Я использую PHP и Zend Framework, но не могу понять, с чего начать.Ранее я обращался к SOAP-сервисам с использованием C # .NET, но для этого потребовалось всего 2-3 строки кода после настройки сервиса с помощью мастера.Есть ли простой способ сделать этот вызов и обработать полученный XML?Если нет, где я могу найти хороший пример, чтобы начать меня?

import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPFault;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPHeader;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;

public class RegistryDetails {
    private static final long serialVersionUID= 1L;
    private static final String SERVICE = "https://ServiceProvider.com/TheService.pl";
    private static final String TAG_GETPRODUCT = "getDetails";
    private static String namespaceService = "http://ServiceProvider.com/TheService.xsd";
    private static String namespaceUserSession = "http://ServiceProvider.com/UserSession.xsd";
    private static String SYSTEM = "thesystem";
    private static String USERNAME = "theusername";
    private static String PASSWORD = "thepassword";

    public static void main(String[] args) {

        try {

            //Create the connection
            SOAPConnectionFactory soapConnFactory = SOAPConnectionFactory.newInstance();
            SOAPConnection connection = soapConnFactory.createConnection();

            //Create the actual message
            MessageFactory messageFactory = MessageFactory.newInstance();
            SOAPMessage message = messageFactory.createMessage();

            MimeHeaders mimeHeader = message.getMimeHeaders();
            mimeHeader.addHeader("SOAPAction", "");

            //Create objects for the message parts            
            SOAPPart soapPart = message.getSOAPPart();
            SOAPEnvelope envelope = soapPart.getEnvelope();

            SOAPHeader header = envelope.getHeader();
            SOAPElement userSession = header.addChildElement("UserSession", "UserSession", namespaceUserSession);

            userSession.addChildElement("TypeOfService").addTextNode("Integrated");
            userSession.addChildElement("System").addTextNode(SYSTEM);
            userSession.addChildElement("Username").addTextNode(USERNAME);
            userSession.addChildElement("Password").addTextNode(PASSWORD);

            SOAPBody body = envelope.getBody();

            //Populate the body
            //Create the main element and namespace
            SOAPElement getDetails = body.addChildElement(TAG_GETPRODUCT, "dfg", namespaceService);

            getDetails.addChildElement("queryField1").addTextNode("xxx"); 
            getDetails.addChildElement("queryField2").addTextNode("yyy"); 
            getDetails.addChildElement("queryField3").addTextNode("zzz");  

            //Save the message
            message.saveChanges();

            //Check the input
            System.out.println("\nREQUEST:\n");
            message.writeTo(System.out);
            System.out.println();

            //Send the message and get a reply   

            //Send the message
            SOAPMessage reply = connection.call(message, SERVICE);

            System.out.println("\nRESPONSE:\n");
            reply.writeTo(System.out);
            System.out.println();

            {
                SOAPBody retbody = reply.getSOAPBody();
                if (retbody.hasFault()) {
                    SOAPFault fault = retbody.getFault();
                    System.out.println("SOAPfault: " + fault.getFaultString());
                }
                else {
                    XPathFactory factory = XPathFactory.newInstance();
                    XPath xpath = factory.newXPath();
                    XPathExpression expr = xpath.compile("*/RESULT/HOV/ReturnField1");
                    String returnField1 = (String)expr.evaluate(retbody, XPathConstants.STRING);
                    System.out.println("Result: " + returnField1);
                }
            }

            //Close the connection            
            connection.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }   
}

1 Ответ

0 голосов
/ 15 марта 2012

http://framework.zend.com/manual/en/zend.soap.client.html - введите свой URL-адрес WSDL, после чего вы сможете совершать звонки по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...