2017-09-27 8 views
0

Ich muss eine SOAPMessage aus einer Zeichenfolge erstellen.Probleme generieren Umschlag Sonderzeichen

Mein Problem ist, dass die Zeichenfolge Sonderzeichen enthält und gibt mir einen Fehler beim Versuch, die Hülle zu generieren.

Ich muss den Umschlag mit Sonderzeichen erstellen.

Ich benutze nur die Klassen von Java 1.7 und ich muss die Klassen des Codes verwenden, ich kann nicht eine andere Art von Umschlag verwenden.

Das ist mein Code

public class Main { 
    public static void main(String[] args) { 
    try { 
     //We have a envelope with special characters 
     String input = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"><soapenv:Header/><soapenv:Body xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\"><car:Input xmlns:car=\"http://soap.sctinst.redsys.es/consumed/CARGAENTIDADES\"><list><obj><name>José Televisión</name></obj></list></car:Input></soapenv:Body></soapenv:Envelope>"; 
     MimeHeaders headers = new MimeHeaders(); 
     headers.setHeader("Content-Type", "text/xml"); 
     headers.setHeader("Encoding", "UTF-8"); 

     ByteArrayInputStream bis = new ByteArrayInputStream(input.getBytes("UTF-8")); 
     int n = bis.available(); 
     byte[] bytes = new byte[n]; 
     bis.read(bytes, 0, n); 

     //I specify the encoding 
     String s = new String(bytes, StandardCharsets.UTF_8); 

     InputStream is = new ByteArrayInputStream(s.getBytes()); 

     //Create a new SOAPMessage 
     SOAPMessage message = MessageFactory.newInstance().createMessage(headers, is); 

     ByteArrayOutputStream out = new ByteArrayOutputStream(); 
     message.writeTo(out); 
     out.toString(); 
     //print the envelope and the especial characters are corrects 
     System.out.println(out.toString()); 
     SOAPPart soapPart = message.getSOAPPart(); 

     //FAIL THIS LINE 
     //com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory createEnvelope 
     //GRAVE: SAAJ0511: Unable to create envelope from given source 
     SOAPEnvelope soapEnvelope = soapPart.getEnvelope(); 


     SOAPHeader soapHeader = soapEnvelope.getHeader(); 
     SOAPBody soapBody = soapEnvelope.getBody(); 
     Source source = soapPart.getContent(); 
     //.... continue the code  
    } catch (SOAPException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 
} 

Dank

+0

Was ist der Fehler? Veröffentlichen Sie den Stack-Trace. –

Antwort

0

pro XML-Standard gibt es 3 Zeichen, die XML kodiert sein muss. Bitte werfen Sie einen Blick auf die Antwort hier: xml-or-php-or-someone-is-eating-my-characters

BTW: Wenn durch irgendwelche Chancen Binärdaten sein könnte, muss es auch codiert werden. Als Base64, Hexadezimal oder sonstwie.

UPD: Über welche Sonderzeichen sprechen Sie? Ihr Beispiel hat keine von ihnen und es funktioniert gut. Bitte senden Sie die Nachricht (en) von "verursacht durch:" Teil (e) Ihrer Ausnahme.

SAAJ0511: Unable to create envelope from given source ist eine Top-Nachricht und sagt nichts nützliches.