Soapnachricht aus String erstellen

Lito

Mitglied
Hallo,

ich möchte gerne aus eine Gzip Komprimierte Soapnachricht versenden.
Aus folgender Code (abgespekte Version) sollte mein Problem ersichtlich werden:
Wenn ich die generierte Soapnachricht in SOAPUI absende und gZip aktiviere funktioniert alles bestens. Das XML ist wohl valide. Seltsam ist auch das ich im Raw Request in SoapUI sehe das der Gzippte part ca 25 % stärker komprimiert ist als wenn ich Ihn gzippe.

Sieht jemand wo mein Fehler ist ?

Java:
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.zip.Deflater;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

//import org.apache.axis2.transport.http.HTTPConstants;
import org.w3c.dom.Document;


public class SoapfromStream {

    private String action;
  
    public static void main(String[] args) {
        String soapEnv =  "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:fir=\"http://www.someEndpoint/soap/\">" +
                "  <soapenv:Header>\r\n" +
                "    <wsse:Security xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\" xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\" soapenv:mustUnderstand=\"1\">" +
                "      <wsse:UsernameToken wsu:id=\"UsernameToken-E5796C61BC19712BB2B8BF70FC9BE77E\">" +
                "        <wsse:Username>someName#xx_00_1234567</wsse:Username>" +
                "        <wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\">xyz12345</wsse:Password>" +
                "        <wsse:Nonce EncodingType=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary\">MjkzNjNBRDFCQzBENEFEOA==</wsse:Nonce>" +
                "      </wsse:UsernameToken>" +
                "    </wsse:Security>" +
                "  </soapenv:Header>" +
                "  <soapenv:Body>" +
                "    <fir:submitDATDVC>" +
                "      <inDATDVC>" +
                "        <fir:dateiname>DerDateiname-01.xml</fir:dateiname>" +
                "      </inDATDVC>" +
                "      <kundenreferenz>1234567</kundenreferenz>" +
                "      <datei>PD94bW ...someBase64coded... AgPC9Eb2N1bWVudD4gIDwvUHlsZD48L0JpekRhdGE+</datei>" +
                "    </fir:submitDATDVC>" +
                "  </soapenv:Body>" +
                "</soapenv:Envelope>";

        try {
            new SoapfromStream("DATDVC", soapEnv);
        } catch (SOAPException | IOException e) {
            e.printStackTrace();
        }
    }
  
  
    private SOAPMessage createSOAPRequest(String soapEnvStr) throws SOAPException, IOException {
        // Create SOAP Connection
        SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
        SOAPConnection soapConnection = soapConnectionFactory.createConnection();
        MessageFactory messageFactory = MessageFactory.newInstance();
        GZIPInputStream bAiS = new GZIPInputStream(new ByteArrayInputStream(compressGZip(soapEnvStr)));
//Bis hierhin sieht alles Gut aus der Fehler passiert wohl beim erstellen der Soapnachricht .createMessage(null, bAiS)
        SOAPMessage gzipReq = messageFactory.createMessage(null, bAiS);
        MimeHeaders mheaders = gzipReq.getMimeHeaders();
        mheaders.setHeader("SOAPAction", "submit"+this.action);
        mheaders.setHeader("Accept-Encoding", "gzip,deflate");  // Eingehend
        mheaders.setHeader("Content-Encoding", "gzip"); // Ausgehend
//        gzipReq.setProperty(HTTPConstants.MC_GZIP_REQUEST, true);
//        gzipReq.setProperty(HTTPConstants.COMPRESSION_GZIP, true);
//        gzipReq.setProperty(HTTPConstants.MC_GZIP_RESPONSE, true);
//        gzipReq.setProperty(HTTPConstants.MC_ACCEPT_GZIP, true);
//        gzipReq.setProperty(HTTPConstants.CHUNKED, true);
//        gzipReq.setProperty(HTTPConstants.HEADER_TRANSFER_ENCODING, true);
        gzipReq.saveChanges();
        printXMLDocument(gzipReq.getSOAPPart());
        SOAPMessage response = soapConnection.call(gzipReq, new URL("https://SoapEndpointURL.de:444/soap"));
        System.out.println("Request SOAP Message:");
        printXMLDocument(response.getSOAPPart());
        return response;
    }
  
    /**
     * Schreibt das XML in Datei (oder auf Konsole)
     * @param document
     * @param type
     */
    public void printXMLDocument(Document document) {
        try {
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            DOMSource source = new DOMSource(document);
            StreamResult result;
          
            result = new StreamResult(System.out);
          
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
            transformer.transform(source, result);
        } catch (TransformerException e) {
          
            e.printStackTrace();
        }
      
    }
  
    /**
     * G-Zippt einen String
     * @param input der Inputstring der komprimiert werden soll
     * @return g-zipptes bytearray
     * @throws IOException
     */
    private byte[] compressGZip(String input) {
        if ((input == null) || (input.length() == 0)) {
            return null;
        }
        ByteArrayOutputStream baOS = new ByteArrayOutputStream();
        GZIPOutputStream gZipOS = null;
        try {
            gZipOS = new GZIPOutputStream(baOS) {{
                def.setLevel(Deflater.DEFLATED);
            }
        };
            gZipOS.write(input.getBytes("UTF-8"));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (gZipOS != null) try {
                gZipOS.flush();
                gZipOS.close();
                gZipOS.finish();
            } catch (IOException ignore) {}
        }
      
        byte[] gzippedContent = baOS.toByteArray();
        System.out.println("Aus " + input.length() + " Zeichen wurden " + gzippedContent.length + " Zeichen gezipped");
      
        //System.out.println("Teste Compression indem der compresst Request decompressed wird:");
        //System.out.println("Decompressed again: " + decompress(gzippedContent).length() + " Zeichen");
        //System.out.println(decompress(gzippedContent));
        return gzippedContent;
    }
  
    private String decompress(byte[] compressed) {
        final StringBuilder outStr = new StringBuilder();
        if ((compressed == null) || (compressed.length == 0)) {
            return "";
        }
        if (isCompressed(compressed)) {
            GZIPInputStream gis;
            try {
                gis = new GZIPInputStream(new ByteArrayInputStream(compressed));
                final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(gis, "UTF-8"));
                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    outStr.append(line);
                }
            } catch (IOException e) {
                // TODO Automatisch generierter Erfassungsblock
                e.printStackTrace();
            }
        } else {
            outStr.append(compressed);
        }
        return outStr.toString();
    }

    public static boolean isCompressed(final byte[] compressed) {
        return (compressed[0] == (byte) (GZIPInputStream.GZIP_MAGIC))
                && (compressed[1] == (byte) (GZIPInputStream.GZIP_MAGIC >> 8));
    }
  
    public SoapfromStream( String action, String SoapEnv) throws SOAPException, IOException {
        System.setProperty("https.protocols", "TLSv1.2");
        System.setProperty("https.cipherSuites", "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256");
        this.action =  action;
        createSOAPRequest(SoapEnv);
    }

}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Sachinbhatt Python string find() examples XML & JSON 1
N JSON export String Unicode? XML & JSON 6
W Request als String XML & JSON 0
R String in XSLT teilen XML & JSON 3
P Bestimmte XML-Inhalte in String lesen XML & JSON 2
M RSS als String speichern XML & JSON 12
W XMLStreamReader zu String machen? XML & JSON 2
B XML-Element als String ausgeben XML & JSON 5
H XML String auslesen XML & JSON 4
H XML String erstellen XML & JSON 4
T Wie einen String(XML Inhalt) in eine XML Datei speichern? XML & JSON 8
N XML-String in MIDP auslesen XML & JSON 3
W String nach XML nach String verwandeln XML & JSON 4
W XML DomDocument als String auslesen XML & JSON 2
B jdom document aus string erzeugen? XML & JSON 1
H Adapter: String->Element bzw. Element->String XML & JSON 6
A XML Tags als PHP String XML & JSON 4
S String in element casten XML & JSON 2
I XML-String mit SAX parsen ? XML & JSON 2
S JAVA XML Parser der einen String parst XML & JSON 3
G Elementbaum in String umwandeln XML & JSON 5
A StAX API: Cannot Cast from QName to String! XML & JSON 2
S org.jdom.document in String umwandeln. XML & JSON 2
S DefaultMutableTreeNodes als String in Textdatei speichern XML & JSON 7
W Xml-String parsen XML & JSON 2
B XML String einlesen XML & JSON 4
R XML Document als String XML & JSON 2
M Probleme mit String XML & JSON 3
G getAtributeValue liefert String mit störenden Steuerzeichen XML & JSON 2
D Text, String vor einem Root Element einfügen XML & JSON 2
R wie kann ich ein xml file in einen string einlesen? XML & JSON 2
E Element.setTextContent(String); Ersatz fuer Version 1.4? XML & JSON 3
S Jackson: Erstellen Sie Klassen für Jackson aus XSD XML & JSON 2
T Tags in XML Datei mit Java erstellen XML & JSON 3
W Openapi Beschreibung erstellen XML & JSON 3
Z json inkl. Array/Verschachtelung erstellen XML & JSON 2
S Muss ich bei JAXB immer noch eine zusaetzliche List-Wrapper Klasse erstellen wenn ich mehrere Objekte serialisieren will..? XML & JSON 1
U jar Datei mit ant erstellen XML & JSON 1
K XML Datei erstellen und Daten daraus in Java auslesen XML & JSON 6
D XML-Datei per Button erstellen XML & JSON 3
P Eclipse - Ant Skript - jar erstellen mit Referenced Libraries - build.xml XML & JSON 5
S XML file lässt sich in Eclipse nicht erstellen XML & JSON 2
P (Eclipse)Ant Script, .jar Datei erstellen mit MANIFEST.MF XML & JSON 12
B Doctype erstellen XML & JSON 2
B XML file erstellen und in lesbarer form speichern XML & JSON 2
I Tablle mit xsl erstellen XML & JSON 2
D XML Liste erstellen XML & JSON 9
S Konforme XML Datei über XSD erstellen XML & JSON 2
D XSD Datei erstellen XML & JSON 4
B XML auf Basis einer DTD erstellen XML & JSON 2
hdi Probleme beim Erstellen einer XML XML & JSON 7
F Standard für das erstellen von XML? XML & JSON 4
K DTD aus XML erstellen XML & JSON 2
ARadauer Aus XML Datei Objekte erstellen... XML & JSON 3
R JAXB: Aus einem Vector oder List XML Datei erstellen XML & JSON 1
M xml - datei erstellen XML & JSON 2
T Java Klasse für gegebenes XML erstellen XML & JSON 4
S Probleme beim erstellen einer Jar XML & JSON 12
G MS-Word Dokument mit Java erstellen XML & JSON 2
M neue Knoten erstellen ? XML & JSON 6
N neue XML-Datei erstellen mit vorhandener Struktur XML & JSON 18
L mit Java eine HTML-Datei erstellen XML & JSON 3
M XSL-FO PDF erstellen XML & JSON 15
G Aus CLOB ein XML erstellen XML & JSON 2
D JTree aus XML Datei erstellen & JTree wieder in XML spei XML & JSON 4
C XML per XSD erstellen XML & JSON 2
P Aus einem Node ein Document erstellen XML & JSON 2
D XML-file mit Eclipse erstellen + Namespaces XML & JSON 2
K XML erstellen, verändern usw. XML & JSON 15
M Elemente mit Prefix via JDOM erstellen XML & JSON 6
P Problem beim erstellen eines neuen Elements (JDOM) XML & JSON 5
H XML-Datei mit SQL-Syntax erstellen und verwalten XML & JSON 4
S Problem beim Erstellen eines pdfs XML & JSON 3
T Newbie Frage.aus Java eine XML Datei erstellen? XML & JSON 7
P HTML mit JDOM erstellen und in JEditorPane zeigen XML & JSON 4
J DTD aus xml Datei erstellen XML & JSON 4
R XML Dokumente erstellen XML & JSON 1

Ähnliche Java Themen

Neue Themen


Oben