| Author |
Desperate newbie - problem with image attachment
|
Eyad Garelnabi
Greenhorn
Joined: Nov 30, 2004
Posts: 1
|
|
Hi, I�m an axis newbie and having trouble sending an image attachment (document style message) from my client to the server. The attachment seems to go across fine, but when I use AttachmentPart on the server, the server hangs. It tries to write the binary source to the console/screen and the PC beeps endlessly, and it hangs. I�ve been at this for ten days now trying to figure out what the problem is. No one at work has much experience with axis so I�m on my own on this one. Any tips whatsoever on what it is I�m doing wrong would be very much appreciated. Below are the following files: -RemoteTaskResultService (client-side) -RemoteTaskResultImpl (server-side) -remotetaskresult (wsdl) I�m using Axis 1.1, Tomcat 4.1.x Thanx a million ----------------------------------------- RemoteTaskResultService: import java.io.ByteArrayInputStream; import java.rmi.RemoteException; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.xml.parsers.ParserConfigurationException; import javax.xml.rpc.ServiceException; import org.apache.axis.attachments.AttachmentPart; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.message.SOAPBodyElement; import org.w3c.dom.Document; import com.touchpoint.catapult.client.domain.Node; import com.touchpoint.catapult.client.message.RemoteTaskRequest; import com.touchpoint.catapult.client.message.xmlprocessing.ToXmlConverter; public final class RemoteTaskResultService extends CatapultService{ public RemoteTaskResultService(String serviceURI) { super(serviceURI); } public void returnRemoteTaskResult(int taskId, Node node, Object object) throws Exception, ServiceException, ParserConfigurationException, RemoteException { Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress( "http://" + this.getServiceURI()); RemoteTaskRequest remoteTaskRequest = new RemoteTaskRequest(); remoteTaskRequest.setNodeId(node.getNodeId()); Document doc = ToXmlConverter.getXml(RemoteTaskRequest.class,remoteTaskRequest); SOAPBodyElement[] soapRequest = new SOAPBodyElement[1]; String positionHTTPHeader="Ordinal"; String refs; String setContentId="ScreenShot"; AttachmentPart ap= new AttachmentPart(new DataHandler(new FileDataSource("C:\\screenshot.jpg"))); ap.setContentId(setContentId); refs = "cid:" + setContentId; //reference the attachment by contentId. ap.setMimeHeader(positionHTTPHeader, "" + 1 ); //create a MIME header indicating postion. call.addAttachmentPart(ap); String namespace="urn:foo"; //needs to match name of service. StringBuffer msg = new StringBuffer("\n<attachments xmlns=\"" +namespace +"\">\n"); msg.append(" <attachment href=\"" + refs + "\"/>\n"); msg.append( "</attachments>"); soapRequest[0] = new SOAPBodyElement(new ByteArrayInputStream(msg.toString().getBytes())); call.invoke(soapRequest); } } ________________________________________ RemoteTaskResultImpl: import java.io.StringReader; import java.util.Iterator; import org.apache.axis.AxisFault; import org.apache.axis.Message; import org.apache.axis.MessageContext; import org.apache.axis.attachments.AttachmentPart; import org.apache.axis.attachments.Attachments; import org.apache.axis.utils.XMLUtils; import org.w3c.dom.Element; public class RemoteTaskResultImpl implements RemoteTaskResultIF{ public Element[] setTaskResult(Element[] elems){ String requestAttachment = XMLUtils.ElementToString(elems[0]); StringReader requestAttachmentReader = new StringReader(requestAttachment); try { //This is where the server hangs AttachmentPart[] attachment = getMessageAttachments(); } catch (AxisFault e) { e.printStackTrace(); } return null; } /**====================================================================== * Private Methods *=======================================================================*/ private AttachmentPart[] getMessageAttachments() throws AxisFault { MessageContext msgContext = MessageContext.getCurrentContext(); Message reqMsg = msgContext.getRequestMessage(); Attachments messageAttachments = reqMsg.getAttachmentsImpl(); if (null == messageAttachments) { return new AttachmentPart[0]; } int attachmentCount= messageAttachments.getAttachmentCount(); AttachmentPart attachments[] = new AttachmentPart[attachmentCount]; Iterator it = messageAttachments.getAttachments().iterator(); int count = 0; while (it.hasNext()) { AttachmentPart part = (AttachmentPart) it.next(); attachments[count++] = part; } return attachments; } } ------------------------------------------------ remotetaskservice: <?xml version="1.0" encoding="UTF-8"?> <wsdl efinitions targetNamespace="http://localhost:8080/catapult/services/remotetaskresult" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/catapult/services/remotetaskresult" xmlns:intf="http://localhost:8080/catapult/services/remotetaskresult" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="http://webservice.server.catapult.touchpoint.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><wsdl:types><schema targetNamespace="http://webservice.server.catapult.touchpoint.com" xmlns="http://www.w3.org/2001/XMLSchema"><element name="setTaskResult" type="xsd:anyType"/></schema><schema targetNamespace="http://localhost:8080/catapult/services/remotetaskresult" xmlns="http://www.w3.org/2001/XMLSchema"><element name="setTaskResultReturn" type="xsd:anyType"/></schema></wsdl:types> <wsdl:message name="setTaskResultRequest"> <wsdl art element="tns1:setTaskResult" name="part"/> </wsdl:message> <wsdl:message name="setTaskResultResponse"> <wsdl art element="impl:setTaskResultReturn" name="setTaskResultReturn"/> </wsdl:message> <wsdl ortType name="RemoteTaskResultImpl"> <wsdl peration name="setTaskResult"> <wsdl:input message="impl:setTaskResultRequest" name="setTaskResultRequest"/> <wsdl utput message="impl:setTaskResultResponse" name="setTaskResultResponse"/> </wsdl peration> </wsdl ortType> <wsdl:binding name="remotetaskresultSoapBinding" type="impl:RemoteTaskResultImpl"> <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl peration name="setTaskResult"> <wsdlsoap peration soapAction=""/> <wsdl:input name="setTaskResultRequest"> <wsdlsoap:body namespace="http://webservice.server.catapult.touchpoint.com" use="literal"/> </wsdl:input> <wsdl utput name="setTaskResultResponse"> <wsdlsoap:body namespace="http://localhost:8080/catapult/services/remotetaskresult" use="literal"/> </wsdl utput> </wsdl peration> </wsdl:binding> <wsdl:service name="RemoteTaskResultImplService"> <wsdl ort binding="impl:remotetaskresultSoapBinding" name="remotetaskresult"> <wsdlsoap:address location="http://localhost:8080/catapult/services/remotetaskresult"/> </wsdl ort> </wsdl:service> </wsdl efinitions>
|
 |
 |
|
|
subject: Desperate newbie - problem with image attachment
|
|
|