SOAP Attachment

Saskia21

Mitglied
Hi
versuche mittles SOAP Attachment Dateien zu verschicken.
ich habe auf der Serverseite dies hier eingebaut:

Code:
Java:
import javax.xml.soap.AttachmentPart;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPMessage;


public class Bild {
   public String test(){
      try{
         MessageFactory mf = MessageFactory.newInstance();
         SOAPMessage message = mf.createMessage();
         AttachmentPart a = message.createAttachmentPart();
         a.setContent("Ein Attachment", "text/plain");
         message.addAttachmentPart(a);
      }catch(Exception e){
         e.printStackTrace();
      }
      
      return "test";
   }
}

kann man dann hier eine Datei einfügen? -> statt dem String
Code:
Java:
a.setContent("Ein Attachment", "text/plain");

wenn ich allerdings einen request auf den Webservice loslasse bekomme ich eine Fehlermeldung-Warum?
request:

Code:
Java:
- <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://DefaultNamespace" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <soapenv:Body>
  <q0:test />
  </soapenv:Body>
  </soapenv:Envelope>

respose:
Code:
Java:
<?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>
    <soapenv:Fault>
      <faultcode>soapenv:Server.userException</faultcode>
      <faultstring>org.xml.sax.SAXParseException: Content is not allowed in prolog.</faultstring>
      <detail>
        <ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">entwicklung08</ns1:hostname>
      </detail>
    </soapenv:Fault>
  </soapenv:Body>
</soapenv:Envelope>

Wie kann ich (wenn es funktioniert...) beim Client diesen AttachmentPart bekommen?
 
Zuletzt bearbeitet:
Benutz doch bitte die [ java] [ /java] tags um code zu posten. Liest sich sonst sauschwer.

setContent auf dem AttachmentPart nimmt ja ein Object und ein String entgegen. Du kannst also als ersten Parameter alles beliebige übergeben, solang der MIME Type (zweiter Parameter) stimmt.

Das JavaDoc ist eigentlich ganz aufschlussreich: http://ws.apache.org/axis/java/apiDocs/javax/xml/soap/AttachmentPart.html

Dokumente (PDFs z.B.) sind meist vom MIMEType OctetStream. Vermute du musst die als ByteArrayInputStream schicken, ähnlich dem Imagebeispiel aus dem Link hier.

Gruß
Ollie
 
Hi
Danke für deine Antwort.
Java:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;

import javax.xml.soap.AttachmentPart;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPMessage;


public class Bild {
	public String test(){
		try{
			MessageFactory mf = MessageFactory.newInstance();
			SOAPMessage message = mf.createMessage();
			AttachmentPart a = message.createAttachmentPart();
			a.setContent(new ByteArrayInputStream(gebeBild()), "image/jpeg");
			message.addAttachmentPart(a);
		}catch(Exception e){
			e.printStackTrace();
		}
		
		return "test";
	}
	public byte[] gebeBild()
	{
		int got = 0;
	    byte read[] = new byte[2000];

	    ByteArrayOutputStream bo = new ByteArrayOutputStream();

	    try
	    {
	      FileInputStream fis = new FileInputStream("c:/bild.bmp");
	      while (got >= 0)
	      {
	        got = fis.read(read);
	        if (got > 0)
	        {
	          bo.write(read, 0, got);
	        }

	      }
	      fis.close();
	      bo.close();

	    }
	    catch (Exception e)
	    {
	       System.out.println("Fehler beim Dateilesen: "+e);

	    }
	    return bo.toByteArray();
	  }
	
}

nun bekomme ich aber eine java.lang.RuntimeException: No support for attachments Fehlermeldung. Hast du eine Ahnung, wie ich das aufheben kann?
 
Ich habe einmal die JRE System Library jre1.5.0_14
Die Library von Apache Tomcat 5.5
Wep App Libraris
und die Librarys von Axis2
-> meintest du das damit?
 
Hi
Hier der Stacktrace:
Java:
java.lang.RuntimeException: No support for attachments
	at org.apache.axis.Message.createAttachmentPart(Message.java:743)
	at Bild.test(Bild.java:14)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
	at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
	at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
	at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
	at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
	at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
	at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454)
	at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
	at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	at java.lang.Thread.run(Unknown Source)
 
Ich hab hier noch ein kleines Tutorial gefunden? Kannst du mal ausprobieren, ob das Beispiel bei dir tut?

Das Problem ist, dass die Exception von so ziemlich allem herrühren kann. Serverkonfiguration, Fehlende Libraries, falscher Gebrauch der API usw... schwierig...

Gruß
Ollie
 

Neue Beiträge

Zurück