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.