Pensi di progettazione su un oggetto di richiesta basato sullo schema per l'endpoint CXF

6

Cercando di cercare il suggerimento di progettazione su un oggetto di richiesta basato sullo schema per un endpoint CXF. Ho creato un endpoint SOAP CXF che accetta il seguente oggetto come input. L'oggetto richiesta avrà campi obbligatori, campi non obbligatori e campi definiti dall'utente. I campi richiesti vengono applicati attraverso lo schema. L'oggetto tag è definito come segnaposto per le proprietà definite dall'utente. L'obiettivo finale dell'endpoint ha trasformato i valori in oggetto Tag e li ha inviati per l'elaborazione.


    public class TestServiceRequest{

      @XmlElement(required = true)
        protected String url;
        @XmlElement(required = true)
        protected String title;
        protected String source;
        protected List tags;

        public void setUrl(String value) {
            this.url = value;
        }
        public void setTitle(String title) {
            this.title = title;
        }
        public void setS

    ource(String value) {
                this.text = value;
            }
            public List getTags() {
                if (tags == null) {
                    tags = new ArrayList();
                }
                return this.tags;
            }
        

Oggetto tag:

<pre><code>
public class Tag{
   public String name;
   public String value;
   public String weight;
}
</code></pre>

Frammento di schema:

<pre><code>
&lt;xsd:complexType name="tag"&gt;
        &lt;xsd:sequence&gt;
            &lt;xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1" /&gt;
            &lt;xsd:element name="value" type="xsd:string" minOccurs="1" maxOccurs="1" /&gt;
            &lt;xsd:element name="weight" type="xsd:string" minOccurs="0" maxOccurs="1" /&gt;
            &lt;xsd:element name="attribute" type="tns:attribute" minOccurs="0" maxOccurs="unbounded"/&gt;
        &lt;/xsd:sequence&gt;
    &lt;/xsd:complexType&gt;

    &lt;xsd:element name="testServiceRequest"&gt;
        &lt;xsd:complexType&gt;
            &lt;xsd:complexContent&gt;
                &lt;xsd:extension base="br:BaseRequest"&gt;
                    &lt;xsd:sequence&gt;
                        &lt;xsd:element name="url" type="xsd:string" minOccurs="1" maxOccurs="1"/&gt;
                        &lt;xsd:element name="title" type="xsd:string" minOccurs="1" maxOccurs="1"/&gt;
                        &lt;xsd:element name="text" type="xsd:string" minOccurs="1" maxOccurs="1"/&gt;
                        &lt;xsd:element name="source" type="xsd:string" minOccurs="1" maxOccurs="1"/&gt;
                        &lt;xsd:element name="tags" type="tns:tag" minOccurs="0" maxOccurs="unbounded"/&gt;
                    &lt;/xsd:sequence&gt;
                &lt;/xsd:extension&gt;
            &lt;/xsd:complexContent&gt;
        &lt;/xsd:complexType&gt;
    &lt;/xsd:element&gt;
</code></pre>

Come puoi vedere, l'oggetto Tag ha un campo aggiuntivo chiamato peso, che è il punto cruciale del problema. Il peso è un campo facoltativo per ogni proprietà definita come obbligatoria (url, titolo) e campi opzionali (sorgente). I pesi sono definiti dal valore statico per queste proprietà.

Il motivo per cui sono incline a questo modello è innanzitutto, i nomi dei campi delle proprietà (URL, titolo, ecc.) sono conformi a uno standard e non possono deviare. Avendoli definiti in uno schema e generando la richiesta basata su di esso, mi consente di imporlo. L'utente finale è libero dall'utilizzare il nome esatto del campo e usa invece il setter, riducendo così la portata dell'errore. Inoltre, la convalida dello schema può essere integrata facilmente con l'endpoint CXF, quindi la manutenzione è semplice. Qualsiasi modifica è limitata allo schema.

Un problema con questo modello è l'endpoint del servizio che deve esplicitamente aggiungere il peso per i campi durante la conversione in oggetti Tag. Se il cliente decide di inviare i propri valori di peso specifici per le proprietà, questo modello si interromperà.

L'altra opzione è utilizzare un oggetto di richiesta semplificato invece di uno schema generato.

<pre><code>
public class Tag{
   public String name;
   public String value;
   public String weight;
}
</code></pre>

I professionisti affermano che questo modello è semplice e flessibile e consente all'utente di definire pesi e altri metadati se necessario.

Un problema con questo, ho bisogno di un codice di convalida esplicito per assicurarmi che i campi richiesti siano forniti e che i nomi dei campi siano corretti. Ciò significa che ogni volta che viene aggiunto un nuovo campo, devo toccare il codice per aggiungerlo come parte della convalida.

Sono in un dilemma per decidere quale sia il modo migliore di progettarlo. Forse, c'è un modo migliore per farlo invece.

Qualsiasi puntatore sarà molto apprezzato.

Grazie

    
posta Shamik 07.08.2012 - 01:56
fonte

0 risposte

Leggi altre domande sui tag