Rucna deserializacia xml pochadzajuceho zo soap message

Martin Grebac Martin.Grebac na Sun.COM
Pátek Listopad 6 10:48:28 CET 2009


Ahoj,
 tu je typicky kod pre deserializaciu (unmarshalling) s pomocou JAXB:

 https://jaxb.dev.java.net/tutorial/section_3_1-Unmarshalling-and-Using-the-Data.html#Unmarshalling%20and%20Using%20the%20Data

 JAXBContext je mozne vytvorit bud s pomocou packagov, alebo priamo 
specifikovanych .class (ktore mate vygenerovane zo schem), pripadne 
dalsimi sposobmi. Vystupny objekt z u.unmarshall(inputStream) potom 
zavisi od vytvoreneho JAXBContextu.

 Neviem aky je usecase, ale ak ide len o precitanie jednej hodnoty (tak 
to vsak vacsinou len zacina ;O) ) tak asi najefektivnejsi pristup je SAX.

 MartiNG


Dusan Zatkovsky wrote:
> Ahoj.
>
> Snazim sa vyriesit nasledovny problem ( tyka sa to datovych schranok ):
>
> Mam k dispozicii xml, ktore vyzera byt fragmentom nejakej soap message ( asi jej payloadom ).
>
> Konkretny priklad:
>
> <?xml version="1.0"?>
> <q:MessageDownloadResponse xmlns:q="http://isds.czechpoint.cz/v20/message"
>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" isds_send="https://www.czebox.cz/any/DS/dz">
>   <q:dmReturnedMessage>
>     <p:dmDm xmlns:p="http://isds.czechpoint.cz/v20">
>       <p:dmID>101761</p:dmID>
>       <p:dbIDSender>abcdefgh</p:dbIDSender>
> 	....
> 	....
>
> Takisto mam k dispozicii mnozstvo java class, vygenerovanych z xsd-cok, do ktorych sa pri priamom volani webservice
> toto xml transformuje.
>
> Ja by som rad to xml nejak deserializoval vyuzitim tych class a nepisal si vlastny sax parser.
> Som si takmer isty ( z priameho volania ws ), ze vysledok by mal byt v class-e Holder<TReturnedMessage>.
> Nedari sa mi ale prist na sposob, ako na to.
>
> Hladal som "MessageDownloadResponse", to som nasiel vo wsdl ako:
>
>   <message name="MessageDownloadResponse">
>     <part name="parameter" element="tns:MessageDownloadResponse" />
>   </message>
>
> Skusil som si vygenerovat .java zdrojaky z wsdl a skumat tam, ale jedine, na co som narazil, je:
>
> ObjectFactory.java:
>
>     @XmlElementDecl(namespace = "http://isds.czechpoint.cz/v20", name = "MessageDownloadResponse")
>     public JAXBElement<TMessDownOutput> createMessageDownloadResponse(TMessDownOutput value) {
>         return new JAXBElement<TMessDownOutput>(_MessageDownloadResponse_QNAME, TMessDownOutput.class, null, value);
>     }
>
> a
>
> DmOperationsPortType.java:
>
>     @WebMethod(operationName = "MessageDownload")
>     @RequestWrapper(localName = "MessageDownload", targetNamespace = "http://isds.czechpoint.cz/v20", className = "cz.czechpoint.isds.v20.TIDMessInput")
>     @ResponseWrapper(localName = "MessageDownloadResponse", targetNamespace = "http://isds.czechpoint.cz/v20", className = "cz.czechpoint.isds.v20.TMessDownOutput")
>     public void messageDownload(
>         @WebParam(name = "dmID", targetNamespace = "http://isds.czechpoint.cz/v20")
>         String dmID,
>         @WebParam(name = "dmReturnedMessage", targetNamespace = "http://isds.czechpoint.cz/v20", mode = WebParam.Mode.OUT)
>         Holder<TReturnedMessage> dmReturnedMessage,
>         @WebParam(name = "dmStatus", targetNamespace = "http://isds.czechpoint.cz/v20", mode = WebParam.Mode.OUT)
>         Holder<TStatus> dmStatus);
>
>
> Tymto veciam vobec nerozumiem, predpokladam, ze tie anotacie robia nejaku magiu, ktora je mojim ociam ukryta.
>
> Tusi niekto ako na to?
>
> Dik.
>   
-- 
Martin Grebac, http://blogs.sun.com/mgrebac

Web Technologies & Standards
Sun Microsystems Czech

ICQ: 93478885




Další informace o konferenci Konference