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

Odpovedet emailem