2012-11-01 15 views
10

Czy mogę utworzyć komunikat SOAP z reprezentacji ciągów całego komunikatu SOAP? Powodem, dla którego próbuję to zrobić, jest to, że mam obsługę SOAP dla usługi internetowej, w której przechwytuję komunikat SOAP. Muszę zachować cały komunikat SOAP w serwisie WWW, aby wysłać go do innego komponentu. Obecnie usługa sieci Web usuwa informacje o kopercie SOAP. Tak więc w programie obsługi zrobiłem kopię komunikatu SOAP, zakodowałem go w base64, usunąłem oryginalną zawartość Body i dodano zakodowany ciąg. W usłudze sieciowej próbuję odszyfrować treść (zakodowany komunikat SOAP) i zrekonstruować go jako komunikat SOAP, aby wysłać go do innego komponentu.Tworzenie komunikatu SOAP z łańcucha znaków XML całego komunikatu SOAP

+0

można użyć pakietu java.xml.soap utworzyć komunikat SOAP – ChadNC

Odpowiedz

2

Zrobiłem to w dwóch etapach. Najpierw utworzono dokument DOM, a następnie utworzono komunikat SOAPMessage z dokumentu.

50

As per Javadoc, javax.xml.soap.MessageFactory utwórz metody wstępnego wypełniania komunikatu SOAP wymaganymi obiektami, takimi jak koperta, treść, nagłówek, upewniając się, że wiadomość została poprawnie utworzona. Jednak jedyny wariant metody createMessage akceptujący dane wiadomości akceptuje ją jako InputStream. Dlatego potrzebna jest konwersja String do InputStream, a mianowicie tworzenie nowego strumienia bajtów z bajtów ciągów.

Jest to uproszczony przykład ze względu na zwięzłość. W kodzie aplikacji jeden może uniknąć tworzenia fabryki na każdym wywołaniu metody poprzez wydobycie go na polu/stała, określić wymaganą wersję protokołu SOAP, inny zestaw znaków, itp

private SOAPMessage getSoapMessageFromString(String xml) throws SOAPException, IOException { 
    MessageFactory factory = MessageFactory.newInstance(); 
    SOAPMessage message = factory.createMessage(new MimeHeaders(), new ByteArrayInputStream(xml.getBytes(Charset.forName("UTF-8")))); 
    return message; 
} 
+0

Czy mógłbyś rozwinąć swoją odpowiedź trochę bardziej? Dzięki. –

+1

Dodano kilka dodatkowych objaśnień, pozostawiając kod w niezmienionej postaci. – tiurin