2011-01-25 14 views
5

Qual è il modo migliore per gestire costanti di stringa di grandi dimensioni in Java?Gestione di costanti stringa grandi in Java

Immaginate che ho un dispositivo di prova per SOAP e voglio inviare la seguente stringa:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
     <QuoteRequest xmlns="https://www.bcponline.co.uk"> 
      <header> 
       <SourceCode>BN325</SourceCode> 
       <MessageSource>B2B3</MessageSource> 
       <Profile>B08A</Profile> 
       <Password>AP3U86V</Password> 
       <OperatorID>flightline</OperatorID> 
       <ShowWebOptions>0</ShowWebOptions> 
      </header> 
      <serviceSelection> 
       <ServiceProviderCode></ServiceProviderCode> 
       <ProductCode>CarParking</ProductCode> 
       <IATACode>lgw</IATACode> 
      </serviceSelection> 
      <quoteDetails> 
       <DepartureDate>21-Jun-2005</DepartureDate> 
       <DepartureTime>07:00</DepartureTime> 
       <ReturnDate>28-Jun-2005</ReturnDate> 
       <ReturnTime>07:00</ReturnTime> 
       <QuoteReference></QuoteReference> 
       <NoPax>1</NoPax> 
      </quoteDetails> 
      <sPostCode></sPostCode> 
     </QuoteRequest> 
    </soap:Body> 
</soap:Envelope> 

preferirei non mettere le citazioni e le plus intorno ogni linea. Se lo metto in un file è un codice extra e sarebbe piuttosto difficile mettere più stringhe nello stesso file. XML ha problemi a sfuggire al testo (devo usare la bruttezza del CDATA). C'è un modo più semplice?

+0

suggerimento lame: che ne dici di codificare le interruzioni di riga come '\ n's? –

+1

È possibile inserirlo nel file delle proprietà. Devo ancora scrivere codice, ma non così tanto e puoi inserire più di una stringa in esso – jny

+0

correlati: http://stackoverflow.com/questions/782810/working-with-large-text-snippets-in-java-source –

risposta

-1

Che ne dici di utilizzare un oggetto StringBuilder? È sempre possibile utilizzare StringBuilder.toString() per ottenere lo String ...

+0

Sembra ancora più difficile dell'uso di citazioni e vantaggi. Almeno sarà più veloce per il computer da elaborare. – User1

+1

@ User1 - non sarebbe nemmeno più veloce. Piccole parti della stringa si trovano nel file di classe, che dovrebbe essere assemblato in fase di runtime, piuttosto che avere l'intera stringa preassemblata compilata. –

3

Se le stringhe non sono correlate, è possibile inserirle in file separati anche se si tratta di molti file (qual è il problema?).

Se si insiste su un file, è possibile creare un delimitatore univoco, ma si pagherebbe un prezzo quando si tenta di accedere in modo casuale a una voce specifica.

I file di dati dovrebbero essere quasi sempre esternalizzati (probabilmente in una directory separata) e letti quando necessario, piuttosto che codificati nel codice. È più pulito, riduce le dimensioni del codice, riduce la necessità di compilazione e consente di utilizzare lo stesso file di dati per più test. La maggior parte degli apparecchi di prova, nonché gli strumenti di compilazione e integrazione supportano file esterni.

Oppure, è possibile scrivere codice o un builder che crea SOAP dagli argomenti, rendendo tutto molto più conciso (se si è disposti a pagare il costo di runtime). (Correzione: Vedo che hai cambiato il tuo campione, questo sarebbe brutto da generare automaticamente).

+0

* Se insisti su un file, potresti creare un unico file delimitatore * - Sto usando questo con una riga vuota come delimitatore, è molto facile da leggere. * ma si pagherebbe un prezzo quando si tenta di accedere in modo casuale a una voce specifica. * - Normalmente non accade mai, stava pensando di metterlo in programma, quindi non è sicuramente in ordine di grandezza, quindi può tenerlo tutto in memoria. – maaartinus

+0

@maaartinus: Sarei molto attento all'utilizzo di una riga vuota come delimitatore in un formato che consente le linee vuote come spazi bianchi (è corretto?). Ci vuole un errore di fusione o una pasta tagliata incurante per rovinare tutto. – Uri

+0

Certo, ma sto attento: in realtà, nel mio formato, la prima riga di un "paragrafo" è il suo nome. Io uso un enum per tutti i nomi. Nel caso lo rovini, c'è un nome mancante o qualcosa del genere. Qualsiasi nome mancante, duplicato o sconosciuto solleva un'eccezione durante il caricamento. – maaartinus

Problemi correlati