2010-09-29 12 views
15

In Java, lavoriamo molto con JAXB2. Oggetto < - mapping> XML sono definiti come annotazioni in classi Java:Esiste un'API JavaScript per il binding XML - analogico a JAXB per Java?

@XmlRootElement(name="usertask", namespace="urn:test") 
public class UserTask 
{ 
    @XmlElement(namespace="urn:test") 
    public String getAssignee() { ... } 

    public void setAssignee(String assignee) { ... } 
} 

JAXB runtime in grado di leggere queste annotazioni e creare unmarshaller per analizzare XML in un'istanza di un oggetto o di marshall un oggetto in XML.

JAXB navi un compilatore schema (XJC) in grado di generare annotata classi di schemi XML, che è un'altra grande caratteristica.


Ultimamente abbiamo lavorato molto con JavaScript sul lato client. Abbiamo anche bisogno dell'elaborazione XML lì. Ad esempio, è necessario analizzare i documenti WPS come this one. Questi documenti sono inoltre conformi allo different XML schemas (qui è the WPS 1.0.0 schema per l'XML di esempio). Sarebbe bello lavorare con oggetti JavaScript invece che con XML, questo fa risparmiare un enorme sforzo. In alcuni casi possiamo usare soluzioni basate su JSON come DWR, ma in molti casi dobbiamo elaborare XML sul lato client.

La mia domanda è:

C'è qualche analogico di JAXB per Javascript?

Alcuni strumenti che compilano uno schema XML in XML XML < -> mapping di oggetti e forniscono un runtime per la conversione tra oggetti XML e JavaScript?

ho potuto facilmente immaginare mappature generate in una forma come:

UserTask = new JSXML.XmlRootElement({ 
    name: "usertask", 
    namespace: "urn:test", 
    properties: [ 
    { 
     assignee: new JSXML.XmlElement({ 
     name: "assignee", 
     namespace: "urn:test", 
     type: new JSXML.XSD.String() 
     }) 
    } 
    ] 
}); 

e questo dovrebbe essere abbastanza sufficiente per costruire unmarshaller o marshaller.

risposta

0

E il supporto JSON per JAXB?Riutilizza le tue attuali classi di modelli con annotazioni JAXB ma invia JSON dai tuoi endpoint REST.

Le versioni correnti di Jersey supportano questo (tramite il modulo jersey-json) con JSONJAXBContext.

Si potrebbe anche provare il supporto JAXB e JAX-RS.

+1

Il supporto JSON per JAXB è esattamente ciò di cui ho bisogno. Ma sul lato client, in puro JavaScript. Jersey e Co. possono essere utilizzati sul lato server. Al momento abbiamo una soluzione lato server basata su DWR che funziona bene. Ma ho bisogno di una soluzione client-only (il proxy sul lato server è ancora ok). – lexicore

2

Che cosa si può fare è aggiungere una definizione di stile generico: XSLT al tuo XML per convertirli in JSON. es .: http://code.google.com/p/xml2json-xslt/

La gestione di XML con Javascript è un problema rispetto a JSON, in particolare il cross browser.
Il foglio di stile aggiungerà un piccolo sovraccarico alla richiesta. O sul lato server o client, puoi scegliere, ma devi confrontarlo con la complessità del codice e la velocità per analizzare e leggere l'XML con Javascript su diversi browser.

+1

La soluzione XSLT non è adatta per una serie di motivi. Innanzitutto, abbiamo bisogno di un'elaborazione sul lato client. Portare un processore XSLT per convertire da XML a JSON è troppo pesante, inaccettabilmente pesante. Penso che XSLT non sia la migliore scelta di tecnologia qui in ogni caso: ciò che può essere fatto con un XSLT 7K può essere fatto con JavaScript 3K - non è necessario un processore XSLT sul lato client. – lexicore

+1

In secondo luogo, un XSLT come quello sul quale è stato postato il collegamento non è specifico dello schema. Ad esempio, se si dispone di un elemento foo , in realtà non si sa se questo deve essere un singolo elemento: "foo" o un elemento dell'array: ['foo']. Con il 2010 non sai se è un anno o un numero e così via. La mappatura dell'oggetto XML <-> deve essere derivata dallo schema qui per fornire informazioni appropriate sulla struttura e sul tipo che l'istanza XML non fornisce di per sé. – lexicore

+0

L'aggiunta di un'intestazione come '' Nei tuoi XML è compresa da tutti i browser senza aggiungere nulla, oppure puoi renderla lato server (nginx è davvero bravo in questo). Passare a JSON implica alcuni compromessi, specialmente riguardo a schemi, tipi ecc ... Ma per me vale la perdita. – Mic

3

Non ho provato questo, quindi non sono sicuro se funzionerà, ma hanno hai preso in considerazione l'utilizzo di GWT in modo che tu possa ancora utilizzare JAXB e scrivere l'intera app come app java? Non sono sicuro che GWT supporti JAXB (probabilmente no), ma potrebbe esserci un'alternativa per l'analisi di xml che supporterà. Se funziona, puoi automatizzare la creazione dei tuoi modelli javascript tramite gwt e quindi includerli nella tua app. Sì, è molto più cruft di quanto tu voglia, ma batte doverlo scrivere da zero.