From 35e04b2df4ce2f60368b7ca2d11b54162dcff7f2 Mon Sep 17 00:00:00 2001
From: knowcenter <knowcenter@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>
Date: Fri, 24 Aug 2007 11:26:17 +0000
Subject: TR: Update zu SwA-Kommunikation mit MOA-SS/SP

git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@196 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c
---
 .../egiz/sig/connectors/moa/MOASoapConnection.java | 102 +++++++++++++++++++++
 1 file changed, 102 insertions(+)

(limited to 'src/main/java/at/knowcenter')

diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/MOASoapConnection.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/MOASoapConnection.java
index 73ef71b..f9051c5 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/MOASoapConnection.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/MOASoapConnection.java
@@ -5,6 +5,8 @@ package at.knowcenter.wag.egov.egiz.sig.connectors.moa;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.Properties;
 import java.util.Vector;
 
@@ -16,6 +18,16 @@ import javax.xml.rpc.Service;
 import javax.xml.rpc.ServiceFactory;
 
 import org.apache.axis.message.SOAPBodyElement;
+import org.apache.commons.httpclient.Header;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpException;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.methods.multipart.FilePart;
+import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
+import org.apache.commons.httpclient.methods.multipart.Part;
+import org.apache.commons.httpclient.methods.multipart.PartSource;
+import org.apache.commons.httpclient.methods.multipart.StringPart;
+import org.apache.commons.httpclient.params.HttpMethodParams;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.xml.serialize.OutputFormat;
@@ -23,6 +35,7 @@ import org.apache.xml.serialize.XMLSerializer;
 import org.w3c.dom.Document;
 
 import at.knowcenter.wag.egov.egiz.exceptions.WebException;
+import at.knowcenter.wag.egov.egiz.sig.SignatureData;
 import at.knowcenter.wag.egov.egiz.sig.connectors.bku.BKUPostConnection;
 
 /**
@@ -148,5 +161,94 @@ public final class MOASoapConnection
     // }
 
   }
+  
+  public static Properties doPostRequestMultipart(String url, String serviceMode, String request,
+	      final SignatureData data) throws HttpException, IOException
+	  {
+	    log.debug("doPostRequestMultipart:"); //$NON-NLS-1$
+	    
+	    // Wrap XMLRequest into SOAP-Body	    
+	    request = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><soapenv:Body>" +
+	    		request.substring(request.indexOf("?>")+2)+   // do not forget to eliminate any additional XML-header
+	    		"</soapenv:Body></soapenv:Envelope>";
+	    	    
+	    StringPartMR xmlpart = new StringPartMR("test", request, "UTF-8");  //$NON-NLS-1$//$NON-NLS-2$
+	    xmlpart.setContentType("text/xml");
+	    xmlpart.setContentID("<xmlrequest>");	    
+	    
+	    // add file to be signed
+	    final String filename = data.getMimeType().equals("application/pdf") ? "myfile.pdf" : "myfile.txt"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+	    PartSource ps = new PartSource() {
+	      public InputStream createInputStream() throws IOException
+	      {
+	         return data.getDataSource().createInputStream();
+	      }
+
+	      public String getFileName()
+	      {
+	        return filename;
+	      }
+
+	      public long getLength()
+	      {
+	        return data.getDataSource().getLength();
+	      }
+	    };
+	    //ByteArrayPartSource baps = new ByteArrayPartSource(filename, data.getData());
+	    FilePartMR filepart = new FilePartMR("fileupload", ps); //$NON-NLS-1$
+	    filepart.setContentType(data.getMimeType());
+	    filepart.setContentID("<fileupload>");
+	    // this is optional
+	    // filepart.setCharSet(data.getCharacterEncoding());
+	    
+	    Part[] parts = { xmlpart, filepart };
+
+	    HttpMethodParams method_params = new HttpMethodParams();
+	    method_params.setContentCharset("UTF-8"); //$NON-NLS-1$
+	    
+	    PostMethod post_method = new PostMethod(url);
+	    post_method.setParams(method_params);
+	    
+
+	    post_method.addRequestHeader("SOAPAction",serviceMode);
+	    
+//	    MultipartRequestEntity mprqe = new MultipartRequestEntity(parts, post_method.getParams());
+	    MultipartRelatedEntity mprqe = new MultipartRelatedEntity(parts, post_method.getParams());
+	   mprqe.setContentType("text/xml");
+	   mprqe.setStartID("<xmlrequest>");
+	    
+	    post_method.setRequestEntity(mprqe);
+	    // post_method.setRequestHeader("Content-Type", "multipart/related; type=\"text/xml\"; boundary=\""+"\"");
+	    HttpClient http_client = new HttpClient();
+	    
+	    int method_response = http_client.executeMethod(post_method);
+	    log.debug("method_response = " + method_response); //$NON-NLS-1$
+
+	    Properties response_properties = new Properties();
+
+	    if (log.isDebugEnabled())
+	    {
+	      Header[] response_headers = post_method.getResponseHeaders();
+	      for (int i = 0; i < response_headers.length; i++)
+	      {
+	        log.debug("  response_header[" + i + "]: name = " + response_headers[i].getName() + ", value = " + response_headers[i].getValue()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+	      }
+	    }
+	    Header server_header = post_method.getResponseHeader("Server"); //$NON-NLS-1$	       
+	    
+	    response_properties.setProperty(BKUPostConnection.RESPONSE_STRING_KEY, server_header.getValue());
+
+	    log.debug(post_method.getResponseCharSet());
+	    if (!post_method.getResponseCharSet().equals("UTF-8")) //$NON-NLS-1$
+	    {
+	      log.warn("MOA response charset is not UTF-8!"); //$NON-NLS-1$
+	    }
+	    String response_string = post_method.getResponseBodyAsString();
+
+	    response_properties.setProperty(BKUPostConnection.RESPONSE_STRING_KEY, response_string);
+
+	    log.debug("doPostRequestMultipart finished."); //$NON-NLS-1$
+	    return response_properties;
+	  }
 
 }
-- 
cgit v1.2.3