Attached image is null

<?xml version="1.0" encoding="UTF-8"?>

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"

xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"

xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

xmlns:soapbind="http://schemas.xmlsoap.org/wsdl/soap/"

xmlns:tns="http://www.example.org/SOAPAttReceiverWithMessage/"

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://www.example.org/SOAPAttReceiverWithMessage/">

<types>

<xsd:schema

targetNamespace="http://www.example.org/SOAPAttReceiverWithMessage/"

xmlns:tns="http://www.example.org/SOAPAttReceiverWithMessage/"

xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="InfoMessage" type="xsd:string" />

</xsd:schema>

</types>

<message name="imageMsg">

<part element="tns:InfoMessage" name="body" />

<part name="image" type="xsd:hexBinary" />

</message>

<message name="empty" />

<portType name="AttachmentWithMessage">

<operation name="sendImageAndMessage">

<input message="tns:imageMsg" />

<output message="tns:empty" />

</operation>

</portType>

<binding name="AttachmentWithMessageBinding"

type="tns:AttachmentWithMessage">

<soap:binding style="rpc"

transport="http://schemas.xmlsoap.org/soap/http" />

<operation name="sendImageAndMessage">

<soap:operation soapAction="" />

<input>

<soap:body parts="body" use="literal" />

<mime:multipartRelated>

<mime:part>

<mime:content part="image" type="image/gif" />

</mime:part>

</mime:multipartRelated>

</input>

<output>

<soap:body use="literal" />

</output>

</operation>

</binding>

<service name="AttachmentWithMessageService">

<port binding="tns:AttachmentWithMessageBinding"

name="AttachmentWithMessage">

<soap:address

location="URL" />

</port>

</service>

</definitions>

Endpoint generated form WSDL

publicclass AttachmentWithMessageBindingImplimplements org.example.www.AttachmentWithMessage{

publicvoid sendImageAndMessage(java.lang.String body, java.awt.Image image)throws java.rmi.RemoteException{}

Client

...

Name bodyName = soapFactory.createName(

"sendImageAndMessage","tns",

"http://www.example.org/SOAPAttReceiverWithMessage/");

SOAPBodyElement bodyElement =

body.addBodyElement(bodyName);

Name name = soapFactory.createName("InfoMessage");

SOAPElement info =

bodyElement.addChildElement(name);

info.addTextNode("This is a info message!");

AttachmentPart attachment = message.createAttachmentPart();

URL url =new URL("file:///C:/temp/pic.gif");

URLDataSource fds =new URLDataSource(url);

DataHandler dataHandler =new DataHandler(fds);

AttachmentPart attachmentPart =

message.createAttachmentPart(dataHandler);

attachment.setContentId("image");

attachment.setContentType("image/gif");

message.addAttachmentPart(attachmentPart);

URL endpoint =new URL

("URL");

// SOAPMessage response =

connection.call(message, endpoint);

connection.close();

I get the body part right but image is null. SOAP message seems to have thisimage attached but when I try to access it at the enpoint it's null.

SOAP message:

=_Part_0_394663814.1176981061039

Content-Type: text/xml; charset=UTF-8

Content-Transfer-Encoding: binary

Content-Id: <841848929844.1176981061039.***>

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><tns:sendImageAndMessage xmlns:tns="http://www.example.org/SOAPAttReceiverWithMessage/"><InfoMessage>This is a info message!</InfoMessage></tns:sendImageAndMessage></soapenv:Body></soapenv:Envelope>

=_Part_0_394663814.1176981061039

Content-Type: image/gif

Content-Transfer-Encoding: binary

Content-Id: <83287838504.1176981059055.***>

GIF89a?h?

Any suggestions?

[6361 byte] By [basti78a] at [2007-11-27 1:36:26]
# 1

try {

MessageContext context = MessageContext.getCurrentThreadsContext();

SOAPMessageContext soapContext = (SOAPMessageContext)context;

SOAPMessage msg = soapContext.getMessage();

SOAPPart soapPart =msg.getSOAPPart();

SOAPEnvelope envelope = soapPart.getEnvelope();

Iterator i = msg.getAttachments();

while(i.hasNext())

{

System.out.println("Attachment");

AttachmentPart ap = (AttachmentPart)i.next();

System.out.println(ap.getContentId());

System.out.println(ap.getContentType());

System.out.println(ap.getContentLocation());

System.out.println(ap.getSize());

Object oo = ap.getContent();

if(oo==null){

System.out.println("oo is nul");

}

DataHandler dh = (DataHandler)ap.getDataHandler();

if(dh==null){

System.out.println("dh is null");

}

else{

Image o = (Image)dh.getContent();

}

}

When I try to cast DataHandler.getContent() to java awt.Image I get following exception:

com.ibm.ws.webservices.engine.attachments.ManagedMemoryDataSource$Instream incompatible with java.awt.Image

[23.4.2007 16:37:05:862 EEST] 0000002e SystemErrR java.lang.ClassCastException: com.ibm.ws.webservices.engine.attachments.ManagedMemoryDataSource$Instream incompatible with java.awt.Image

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at org.example.www.AttachmentWithMessageBindingImpl.sendImageAndMessage(AttachmentWithMessageBindingImpl.java:65)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at java.lang.reflect.Method.invoke(Method.java:615)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.webservices.engine.dispatchers.java.JavaDispatcher.invokeMethod(JavaDispatcher.java:178)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.webservices.engine.dispatchers.java.JavaDispatcher.invokeOperation(JavaDispatcher.java:141)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.webservices.engine.dispatchers.SoapRPCProcessor.processRequestResponse(SoapRPCProcessor.java:447)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.webservices.engine.dispatchers.SoapRPCProcessor.processMessage(SoapRPCProcessor.java:412)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.webservices.engine.dispatchers.BasicDispatcher.processMessage(BasicDispatcher.java:134)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.webservices.engine.dispatchers.java.SessionDispatcher.invoke(SessionDispatcher.java:204)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.webservices.engine.PivotHandlerWrapper.invoke(PivotHandlerWrapper.java:227)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.webservices.engine.handlers.jaxrpc.JAXRPCHandler.invoke(JAXRPCHandler.java:152)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.webservices.engine.handlers.WrappedHandler.invoke(WrappedHandler.java:64)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.webservices.engine.PivotHandlerWrapper.invoke(PivotHandlerWrapper.java:227)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.webservices.engine.PivotHandlerWrapper.invoke(PivotHandlerWrapper.java:227)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.webservices.engine.WebServicesEngine.invoke(WebServicesEngine.java:332)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.webservices.engine.transport.http.WebServicesServlet.doPost(WebServicesServlet.java:736)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.webservices.engine.transport.http.WebServicesServletBase.service(WebServicesServletBase.java:341)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:966)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:463)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3129)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:238)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:811)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1433)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:93)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:465)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:394)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:290)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:152)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:213)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.io.async.AbstractAsyncFuture.fireCompletionActions(AbstractAsyncFuture.java:195)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:194)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:741)

[23.4.2007 16:37:05:893 EEST] 0000002e SystemErrR at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:863)

[23.4.2007 16:37:05:909 EEST] 0000002e SystemErrR at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1510)

When sending I print size of the attachment

Attachment size = 45233

Size is same when receiving message at server but still it's null.

basti78a at 2007-7-12 0:45:56 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...