SORU
11 NİSAN 2013, PERŞEMBE


Nasıl Java sınıfından SOAP Web Servis çağrısı yapmak?

Ben göreceli olarak yeni web hizmetleri dünya ve benim araştırma gibi görünüyor karıştı beni daha fazla aydınlat beni, benim sorun olduğunu ben belirli bir kütüphane(jar) var uzatmak ile bazı Java eklentisi işlevi.

Bu kütüphane olacak paylaşılan diğer geliştiriciler ve arasında sınıflarda kavanoz olacak sınıfları bir yöntem çağırır bir Java eklentisi (aslında ayarlar bir öznitelik sınıfı, bazı iş mantığı gibi saklama nesnesinde bir db, vb ve geri gönderir nesne ile bu değişiklikler). Geliştirici sınıfını kullanarak tek yapmanız gereken bu hizmet için çağrı mümkün olduğu kadar basit, umarım bu kadar basit yapmak istiyorum.

Car c = new Car("Blue");
c.webmethod();

Ben okuyan JAX-WS için kullanmak sunucu ama bana kalırsa buna gerek yok oluştur wsimport sunucu ne de wsimport istemci beri biliyorum ki her ikisine de sahip sınıflar, sadece etkileşim sınıflar arasında paylaşılan her iki sunucu ve istemci. Ne anlamda Java eklentisi ve sınıf içinde arama yapmak için yapar sence?

CEVAP
11 NİSAN 2013, PERŞEMBE


Senin sorunun anladığım kadarıylabir SABUN (JAX-WS) Java web servisi arayın ve nasıl nesne dönüyor. Bu durumda iki olası yaklaşım vardır:

    • wsimport Java sınıfları oluşturmak ve bunları kullanmak, ya da
    • Bir SOAP istemci oluşturun:
      1. Sıralar, XML nesne;
      2. Aramalar HTTP üzerinden web yöntemi manipülasyon
      3. Dönen XML yanıtı bir nesne haline geri ayrıştırmak.

İlk yaklaşım (wsimport):

Anlıyorum ki sen çoktan hizmetleri' (varlıkları ya da diğer), iş sınıfları ve wsimport oluşturur yeni bir sınıf kümesi (nedense birden sınıfları zaten var).

Bu senaryoda, ya da tek olsa korkarım:

  • (Düzenle) wsimport oluşturulan kodu kullanmak için adapteseninsınıflar (bu zor ve bir şekilde buna değer değil - unutmayın her WSDL değişiklikleri, ve kod yeniden yeniden adapte etmeye zorundasın) iş; ya
  • PES ve wsimport oluşturulan sınıfları kullanın.

İkinci yaklaşım (özel bir SOAP istemci oluşturma) hakkında:

İkinci bir yaklaşım uygulamak için gerekecek:

    • Arama yapın:
      • Kullanın (Ekleri ile SABUN Java için API) SAAJ çerçevesi (, JSE 1.6 ile birlikte gelen bu aşağıya bakınız) çağrıları yapmak için; ya
      • Ayrıca java.net.HttpUrlconnection (java.io bazı işleme) ile yapabilirsin.
    • XML içine nesneleri çevirmek ya da tam tersi:
      • JAXB gibi (Xml Eşleme Nesne) OXM bir çerçeve içine nesneleri/XML serisi/seri hale getirmek için kullanın
      • Ya da, eğer gerekiyorsa, XML (bu takdirde alınan nesnenin yalnızca biraz gönderilmiş bir differente ise en iyi çözüm olabilir) ayrıştırma/el ile oluşturun.

Bir SOAP istemci klasik oluşturma java.net.HttpUrlConnection o kadar ama o kadar basit değil ya) ve this link çok iyi bir başlangıç kodunu bulabilirsiniz.

SAAJ çerçeve kullanın ben recomment:

Ekleri ile SABUN Java için (SAAJ) APIağırlıklı olarak doğrudan herhangi bir Web Hizmeti API sahne arkasında olur SOAP İstek/Cevap mesajları ile başa çıkmak için kullanılır. Geliştiriciler doğrudan ve JAX-WS kullanarak yerine sabun iletileri göndermek ve almak için izin verir.

Bakın aşağıda bir örnek çalışma (run!) SOAP web servis çağrısı SAAJ kullanarak. this web service çağırır.

import javax.xml.soap.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;

public class SOAPClientSAAJ {

    /**
     * Starting point for the SAAJ - SOAP Client Testing
     */
    public static void main(String args[]) {
        try {
            // 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);

            // 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 {
        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.print("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.print("\nResponse SOAP Message = ");
        StreamResult result = new StreamResult(System.out);
        transformer.transform(sourceContent, result);
    }

}

Ve*.* 16 alınan uyarlandı yukarıda (kod)

Seri/kaldırmada için JAXB kullanarak, çok kolay hakkında bilgi bulmak için. Buradan başlayabilirsiniz: http://www.mkyong.com/java/jaxb-hello-world-example/.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DudeFromUkraine

    DudeFromUkra

    7 Ocak 2008
  • EvilControllers

    EvilControll

    20 Ocak 2008
  • Jordie Jordan

    Jordie Jorda

    27 Ocak 2008