ওয়ার্কিং সোপ ক্লায়েন্ট উদাহরণ


123

আমি একটি কার্যকর পরিষেবা সহ জাভাতে একটি সাধারণ (হ্যাঁ) এসওএপি উদাহরণ সন্ধানের চেষ্টা করছি, আমার মনে হয় যে কোনওগুলি কাজ করছে না।

আমি এই চেষ্টা করেছি এক থেকে উদাহরণ কিন্তু এটা ঠিক কাজ করছে না, এটা একটা ফরওয়ার্ড স্ল্যাশ লাগাতে আমাকে জিজ্ঞেস করছেন কিন্তু এটা আছে এবং কিছুই ঘটছে আছে।

সুতরাং কেউ কি কোনও এসওএপি উদাহরণ লিঙ্কগুলি জানেন, আমি ডাউনলোড / অনুরোধ করতে এবং এর সাথে জগাখিচুড়ি করতে পারি?

আপনার সাহায্যের জন্য ধন্যবাদ.


2019 এ সম্পর্কে ডকুমেন্টেশন সন্ধান করা আরও শক্ত ...
কার্লোস ল্যাপেজ মারি

উত্তর:


223

জাভাতে সাধারণ এসওএপি ক্লায়েন্টগুলি প্রয়োগ করতে, আপনি SAAJ কাঠামোটি ব্যবহার করতে পারেন (এটি জেএসই 1.6 এবং তারপরে প্রেরণ করা হয়েছে):

জাভা (SAAJ) এর জন্য সংযুক্তিগুলির সাথে সংযুক্ত এসওএপি মূলত এসওএপি অনুরোধ / প্রতিক্রিয়া বার্তাগুলির সাথে সরাসরি ডিল করার জন্য ব্যবহৃত হয় যা কোনও ওয়েব সার্ভিস এপিআইতে পর্দার আড়ালে ঘটে। এটি বিকাশকারীদের জ্যাক-ডাব্লুএস ব্যবহার না করে সরাসরি সাবান বার্তা প্রেরণ এবং গ্রহণের অনুমতি দেয়।

SAAJ ব্যবহার করে একটি সোপ ওয়েব পরিষেবা কলের একটি কার্যকারী উদাহরণ (এটি চালান!) দেখুন। এটি এই ওয়েব পরিষেবাটিকে কল করে ।

import javax.xml.soap.*;

public class SOAPClientSAAJ {

    // SAAJ - SOAP Client Testing
    public static void main(String args[]) {
        /*
            The example below requests from the Web Service at:
             http://www.webservicex.net/uszip.asmx?op=GetInfoByCity


            To call other WS, change the parameters below, which are:
             - the SOAP Endpoint URL (that is, where the service is responding from)
             - the SOAP Action

            Also change the contents of the method createSoapEnvelope() in this class. It constructs
             the inner part of the SOAP envelope that is actually sent.
         */
        String soapEndpointUrl = "http://www.webservicex.net/uszip.asmx";
        String soapAction = "http://www.webserviceX.NET/GetInfoByCity";

        callSoapWebService(soapEndpointUrl, soapAction);
    }

    private static void createSoapEnvelope(SOAPMessage soapMessage) throws SOAPException {
        SOAPPart soapPart = soapMessage.getSOAPPart();

        String myNamespace = "myNamespace";
        String myNamespaceURI = "http://www.webserviceX.NET";

        // SOAP Envelope
        SOAPEnvelope envelope = soapPart.getEnvelope();
        envelope.addNamespaceDeclaration(myNamespace, myNamespaceURI);

            /*
            Constructed SOAP Request Message:
            <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:myNamespace="http://www.webserviceX.NET">
                <SOAP-ENV:Header/>
                <SOAP-ENV:Body>
                    <myNamespace:GetInfoByCity>
                        <myNamespace:USCity>New York</myNamespace:USCity>
                    </myNamespace:GetInfoByCity>
                </SOAP-ENV:Body>
            </SOAP-ENV:Envelope>
            */

        // SOAP Body
        SOAPBody soapBody = envelope.getBody();
        SOAPElement soapBodyElem = soapBody.addChildElement("GetInfoByCity", myNamespace);
        SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("USCity", myNamespace);
        soapBodyElem1.addTextNode("New York");
    }

    private static void callSoapWebService(String soapEndpointUrl, String soapAction) {
        try {
            // Create SOAP Connection
            SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
            SOAPConnection soapConnection = soapConnectionFactory.createConnection();

            // Send SOAP Message to SOAP Server
            SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(soapAction), soapEndpointUrl);

            // Print the SOAP Response
            System.out.println("Response SOAP Message:");
            soapResponse.writeTo(System.out);
            System.out.println();

            soapConnection.close();
        } catch (Exception e) {
            System.err.println("\nError occurred while sending SOAP Request to Server!\nMake sure you have the correct endpoint URL and SOAPAction!\n");
            e.printStackTrace();
        }
    }

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

        createSoapEnvelope(soapMessage);

        MimeHeaders headers = soapMessage.getMimeHeaders();
        headers.addHeader("SOAPAction", soapAction);

        soapMessage.saveChanges();

        /* Print the request message, just for debugging purposes */
        System.out.println("Request SOAP Message:");
        soapMessage.writeTo(System.out);
        System.out.println("\n");

        return soapMessage;
    }

}

এই ত্রুটিটি পেয়েছেন<faultcode>soap:Client</faultcode><faultstring>Server did not recognize the value of HTTP Header SOAPAction: .</faultstring>
M_K

SOAPAction HTTP শিরোনাম অনুপস্থিত। লাইন যুক্ত করে এটি সংশোধন করেছে MimeHeaders headers = soapMessage.getMimeHeaders(); headers.addHeader("SOAPAction", "http://ws.cdyne.com/VerifyEmail");। আমি এখন মনে করি এটি অদ্ভুত এটি আগে ছাড়া এটি কাজ করেছিল। :)
acdcjunior

আপনি কি ফলাফলের উপাদানগুলি পার্স করার একটি ভাল উপায় জানেন?
এম_কে

তাদের একটি বস্তুর মধ্যে পার্সিং বা শুধু এটি তৈরি, উদাহরণস্বরূপ, একটি Mapএর Stringসহজ ব্যবহার করার জন্য গুলি?
acdcjunior

2
আমাকে এই কল দিয়ে শংসাপত্রগুলি পাস করতে হবে, আপনি দয়া করে শংসাপত্রগুলির সাথে কল করতে আমাকে সহায়তা করতে পারেন
ভিকি

3

হ্যাঁ, আপনি যদি কোনও ডাব্লুএসডিএল ফাইল অর্জন করতে পারেন তবে ইউনিট পরীক্ষার অনুরোধগুলি সহ সেই পরিষেবাটির মক পরিষেবাটি তৈরি করতে আপনি SoapUI ব্যবহার করতে পারেন। আমি এর (মাভেন ব্যবহার করে) একটি উদাহরণ তৈরি করেছি যা আপনি চেষ্টা করতে পারেন


আপনার উদাহরণের লিঙ্কটি 404 ফেরত দেয় you আপনি কি এটি সম্ভবত ফিরে পেতে পারেন?
ইয়েল লি

1

এসিডকিউনিয়ারের প্রতিক্রিয়াটি দুর্দান্ত ছিল, আমি কেবলমাত্র তার ব্যাখ্যাটি পরবর্তী কোড দিয়ে প্রসারিত করলাম, যেখানে আপনি দেখতে পারবেন কীভাবে এক্সএমএল উপাদানগুলির মাধ্যমে পুনরাবৃত্তি হয়।

public class SOAPClientSAAJ {

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

    // Send SOAP Message to SOAP Server
    String url = "http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx";
    SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), url);



    SOAPPart soapPart=soapResponse.getSOAPPart();
    // SOAP Envelope
    SOAPEnvelope envelope=soapPart.getEnvelope();
    SOAPBody soapBody = envelope.getBody();

    @SuppressWarnings("unchecked")
    Iterator<Node> itr=soapBody.getChildElements();
    while (itr.hasNext()) {

        Node node=(Node)itr.next();
        if (node.getNodeType()==Node.ELEMENT_NODE) {
            System.out.println("reading Node.ELEMENT_NODE");
            Element ele=(Element)node;
            System.out.println("Body childs : "+ele.getLocalName());

            switch (ele.getNodeName()) {

          case "VerifyEmailResponse":
             NodeList statusNodeList = ele.getChildNodes();

             for(int i=0;i<statusNodeList.getLength();i++){
               Element emailResult = (Element) statusNodeList.item(i);
               System.out.println("VerifyEmailResponse childs : "+emailResult.getLocalName());
                switch (emailResult.getNodeName()) {

                case "VerifyEmailResult":
                    NodeList emailResultList = emailResult.getChildNodes();

                    for(int j=0;j<emailResultList.getLength();j++){
                      Element emailResponse = (Element) emailResultList.item(j);
                      System.out.println("VerifyEmailResult childs : "+emailResponse.getLocalName());
                       switch (emailResponse.getNodeName()) {
                       case "ResponseText":
                           System.out.println(emailResponse.getTextContent());
                           break;
                        case "ResponseCode":
                          System.out.println(emailResponse.getTextContent());
                           break;
                        case "LastMailServer":
                          System.out.println(emailResponse.getTextContent());
                          break;
                        case "GoodEmail":
                          System.out.println(emailResponse.getTextContent());
                       default:
                          break;
                       }
                    }
                    break;
                default:
                   break;
                }
             }


             break;


          default:
             break;
          }

        } else if (node.getNodeType()==Node.TEXT_NODE) {
            System.out.println("reading Node.TEXT_NODE");
            //do nothing here most likely, as the response nearly never has mixed content type
            //this is just for your reference
        }
    }
    // print SOAP Response
    System.out.println("Response SOAP Message:");
    soapResponse.writeTo(System.out);

    soapConnection.close();
}

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

    String serverURI = "http://ws.cdyne.com/";

    // SOAP Envelope
    SOAPEnvelope envelope = soapPart.getEnvelope();
    envelope.addNamespaceDeclaration("example", serverURI);

    /*
    Constructed SOAP Request Message:
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:example="http://ws.cdyne.com/">
        <SOAP-ENV:Header/>
        <SOAP-ENV:Body>
            <example:VerifyEmail>
                <example:email>mutantninja@gmail.com</example:email>
                <example:LicenseKey>123</example:LicenseKey>
            </example:VerifyEmail>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
     */

    // SOAP Body
    SOAPBody soapBody = envelope.getBody();
    SOAPElement soapBodyElem = soapBody.addChildElement("VerifyEmail", "example");
    SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("email", "example");
    soapBodyElem1.addTextNode("mutantninja@gmail.com");
    SOAPElement soapBodyElem2 = soapBodyElem.addChildElement("LicenseKey", "example");
    soapBodyElem2.addTextNode("123");

    MimeHeaders headers = soapMessage.getMimeHeaders();
    headers.addHeader("SOAPAction", serverURI  + "VerifyEmail");

    soapMessage.saveChanges();

    /* Print the request message */
    System.out.println("Request SOAP Message:");
    soapMessage.writeTo(System.out);
    System.out.println("");
    System.out.println("------");

    return soapMessage;
}

}


-2

ডাব্লুএসডিএলের বুনিয়াদি প্রমাণীকরণের জন্য গৃহীত উত্তর কোড একটি ত্রুটি উত্থাপন করে। পরিবর্তে নিম্নলিখিত চেষ্টা করুন

Authenticator.setDefault(new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("username","password".toCharArray());
    }
});

"পাসওয়ার্ড" .toBase64 () "বা এর মতো কিছু হওয়া উচিত না? আপনি javax.email এর জন্য একই কোড ব্লকটি ব্যবহার করবেন
jjofofan

-5
String send = 
    "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
    "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n" +
    "        <soap:Body>\n" +
    "        </soap:Body>\n" +
    "</soap:Envelope>";

private static String getResponse(String send) throws Exception {
    String url = "https://api.comscore.com/KeyMeasures.asmx"; //endpoint
    String result = "";
    String username="user_name";
    String password="pass_word";
    String[] command = {"curl", "-u", username+":"+password ,"-X", "POST", "-H", "Content-Type: text/xml", "-d", send, url};
    ProcessBuilder process = new ProcessBuilder(command); 
    Process p;
    try {
        p = process.start();
        BufferedReader reader =  new BufferedReader(new InputStreamReader(p.getInputStream()));
        StringBuilder builder = new StringBuilder();
        String line = null;
        while ( (line = reader.readLine()) != null) {
                builder.append(line);
                builder.append(System.getProperty("line.separator"));
        }
        result = builder.toString();
    }
    catch (IOException e)
    {   System.out.print("error");
        e.printStackTrace();
    }

    return result;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.