WSD Consumer for webservice with base64Binary

We need to consume a webservice in WM 7.1.3. There is a field of type Base64Binary in one of the operations for sending files . When i create a WSD consumer in webmethods with wsdl, i can see a field with the same type created in the document types of the connectors inputs.

Now when i try to invoke the consumer by supplying the file data (using the pub.string:base64Decode on a base64 encoded string representation of a file), i get an error saying that the field “fieldName” is absent. I can see the bytes object created in the pipeline when i trace the service, but i keep getting this error on invoking the webservice consumer.

It appears that webmethods is unable to convert the byte[] object (returned by “pub.String:Base64Decode”) to a String field having base constraint of type [base64Binary {}] . Is there a way about this ?

did you try to just use the base64-encoded string in this field?

Another option might a String2ByteArray-conversion without decoding the base64-encoded string.

Can you describe this step a bit more in detail?


The first step worked (passing thee base64 encoded string directly to the webservice)!

However, i fail to understand that. This is my understanding: A file can be sent either as bytes or by encoding into a String (base64). My WM service is receiving a file as a string (BAse64 encoded), and then is attempting to pass the same file as bytes to another SOAP webservice. Hence, i used Base64Decode to decode the file String and convert it into an array of bytes which in turn i would pass to the webservice (the corresponding field for byte[] being Base64Binary. This is what i think should be and should work, but isnt.

Now what is working is this: My flow service is receiving the encoded String and sending it as is to the webservice which is accepting the file as byte[]. This, according to me should not work, but is working.

My best guess is that Apache Axis is decoding the Base64 string before sending the SOAP on the wire.

PS: The webservice that accepts the file as bytes is implemented in Java and deployed to a JBoss server. The actual input paramater of the operation is a byte[] but when the service is deployed , the WSDL shows the field as being of type Base64Binary.