Hi,
I"m not sure about the level of support for MTOM in Axis 1.4.. IIRC
DIms added some basic support some time back..

Looking at your code, you seems to be trying to send the binary data
inline only.. You need to make sure to base64 encode the binary data
when putting them inline...

But this approach will only work for smaller binary data only...

> Serializer jafs = new JAFDataHandlerSerializer();
> jafs.serialize(new QName("binaryData"), null, data.getBinaryData(),
> context);
Make sure to base64 encode the above data...

~Thilina

On 11/2/07, Barlotta, Michael [USA] <[EMAIL PROTECTED]> wrote:
>
>
> Looking for some guidance on Axis1 version 1.4 help building a WS Client
> that can interact with a MTOM WebService.
>
> I am building the client using the Service and Call objects
> The input to the service is a String and a Base64 encoded element - looks
> like this
>
> <arg0>
>     <name>TEST</name>
>     <binaryData>base64 stuff here</binaryData>
> </arg0>
>
>
> I have successfully called the service with null binaryData but I get the
> following error when I pass actual data.
>
> The output is the String sent back in a SOAP Fault
>
> <soap:Text xml:lang ="en">Unmarshalling Error : null </soap:Text>
>
>
> In this example I have a class HelloWorldMtom (JavaBean) with a String and a
> DataHandler attributes that I use as input.
> HelloWorldMtom hwMtom = new HelloWorldMtom();
> hwMtom.setName(name);
> hwMtom.setBinaryData(dh);
>
>
> Here is the client code:
> Service service = new Service();
> Call call = (Call) service.createCall();
> call.setTargetEndpointAddress(ADDRESS);
> call.setOperationName(new QName(HELLO_NAMESPACE, "sayHello"));
> call.setSOAPVersion(SOAPConstants.SOAP12_CONSTANTS);
> call.setProperty(Call.ATTACHMENT_ENCAPSULATION_FORMAT,
> Call.ATTACHMENT_ENCAPSULATION_FORMAT_MTOM);
> call.setProperty(Call.SEND_TYPE_ATTR, Boolean.FALSE);
> call.setReturnType(org.apache.axis.Constants.XSD_STRING);
> call.setOperationStyle(Style.WRAPPED);
> call.setOperationUse(Use.LITERAL);
> QName qnameHelloMtom = new QName(HELLO_NAMESPACE, "helloMtom");
> call.registerTypeMapping(hwMtom.getClass(), qnameHelloMtom, new
> HelloWorldMtomSerializerFactory(), new
> BeanDeserializerFactory(hwMtom.getClass(), qnameHelloMtom));
> call.addParameter("arg0", qnameHelloMtom, ParameterMode.IN);
> String ret = (String) call.invoke( new Object[] { hwMtom } );
>
> I built a custom Serializer as follows:
>  public class HelloWorldMtomSerializer implements Serializer {
>
> public void serialize(QName name, Attributes attributes, Object value,
> SerializationContext context) throws IOException {
>
> if (value!=null){
>
> HelloWorldMtom data = (HelloWorldMtom)value;
> context.startElement(new QName("arg0"), null);
> context.serialize(new QName("name"), null, data.getName(), null,
> Boolean.TRUE, Boolean.FALSE);
> if (data.getBinaryData()!=null){
> Serializer jafs = new JAFDataHandlerSerializer();
> jafs.serialize(new QName("binaryData"), null, data.getBinaryData(),
> context);
> }
> else {
>
> context.serialize(new QName("binaryData"), null, null, null, Boolean.TRUE,
> Boolean.FALSE);
> }
> context.endElement();
> }
> }
> public String getMechanismType() { return Constants.AXIS_SAX; }
> public Element writeSchema(Class javaType, Types types) throws Exception {
>
> return null;
> }
> }
>
> Am I on the right track?
>
> Thanks for any help with this.
>
> Note:
> A CXF and an Axis2 WS client have already been successfully built against
> this WS (I am testing interop with different Java SOAP stacks)
>
> Mike Barlotta
> Associate
> Booz | Allen | Hamilton
>


-- 
Thilina Gunarathne  - http://thilinag.blogspot.com

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to