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