Hi,
Your wsdl is the problem,
you must change
<xsd:element name="fileattach" type="xsd:string"/>
to
<element name="fileattach" type="xsd:base64Binary" xmime:expectedContentTypes="application/octet-stream"/> and use wsdl2java regenerate the cxf client proxy org.apache.servicemix.test.HelloOUT, which means you can use DataHandler from org.apache.servicemix.test.HelloOUT
You can get more details about how to use MTOM in cxf from [1]
[1]http://cwiki.apache.org/CXF20DOC/mtom.html

Freeman

ppil1 wrote:
Hi,

i downloaded latest fuse esb release and deployer my SA whith mtomEnabled pn
cxfse:proxy, but i get the same issue: fileattach element not send as
attachement but send as soapbody element.
I don't known if my issue is related to mtom or because my fileattach
element is defined as a string element in WSDL provided to me. Here the whole WSDL :
<?xml version="1.0" encoding="UTF-8"?>

<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"; xmlns:tns="http://servicemix.apache.org/test_out"; xmlns:typens="http://servicemix.apache.org/test_out/types"; xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/";
        xmlns:xmime="http://www.w3.org/2005/05/xmlmime";
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; name="HelloOUT" targetNamespace="http://servicemix.apache.org/test_out";>

<wsdl:types>
                <xsd:schema 
targetNamespace="http://servicemix.apache.org/test_out/types";
                            elementFormDefault="qualified">
                        <xsd:element name="SayHelloOUT">
                          <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element name="name" 
type="xsd:string"/>
                                                <xsd:element name="fileattach" 
type="xsd:string"/>
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>
                        <xsd:element name="SayHelloOUTResponse">
                          <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element name="name" 
type="xsd:string"/>
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>
                        <xsd:element name="UnknownWordFault">
                          <xsd:complexType>
                                        <xsd:sequence>
                                            <xsd:element name="word" 
type="xsd:string"/>
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>
                </xsd:schema>
  </wsdl:types>

        <wsdl:message name="SayHelloOUTRequest">
                <wsdl:part name="request" element="typens:SayHelloOUT"/>
                <wsdl:part name="fileattach" type="xsd:string"/>

        </wsdl:message>
        <wsdl:message name="SayHelloOUTResponse">
                <wsdl:part name="payload" element="typens:SayHelloOUTResponse"/>
        </wsdl:message>
        <wsdl:message name="UnknownWordFault">
                <wsdl:part name="payload" element="typens:UnknownWordFault"/>
        </wsdl:message>

    <wsdl:portType name="HelloOUT">
                <wsdl:operation name="SayHelloOUT">
                        <wsdl:input message="tns:SayHelloOUTRequest"/>
                        <wsdl:output message="tns:SayHelloOUTResponse"/>
                        <wsdl:fault name="UnknownWord" 
message="tns:UnknownWordFault"/>
                </wsdl:operation>
        </wsdl:portType>

 <wsdl:binding name="HelloOUTSOAPBinding" type="tns:HelloOUT">
        <soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"; />
                <wsdl:operation name="SayHelloOUT">
                        <wsdl:input>
                                <mime:multipartRelated>
                                        <mime:part>
                                                <soap:body parts="request" 
use="literal" />
                                </mime:part>
                                <mime:part>
                                                <mime:content part="fileattach" 
type="text/xml"/>
                                </mime:part>
                                </mime:multipartRelated>

                        </wsdl:input>
                        <wsdl:output>
                                <soap:body use="literal" />
                        </wsdl:output>
                        <wsdl:fault name="UnknownWord">
                                <soap:fault use="literal" name="UnknownWord" />
                        </wsdl:fault>
       </wsdl:operation>
</wsdl:binding>

<wsdl:service name="HelloOUTService">
        <wsdl:port binding="tns:HelloOUTSOAPBinding" name="soap">
           <soap:address location="http://localhost:8080/HelloOUTService/";
/>
       </wsdl:port>
</wsdl:service>
</wsdl:definitions>





Freeman Fang wrote:
Hi,
You need also add mtomEnabled="true" to your cxfse:proxy.
This is a new added feature so there is no apache servicemix release including it, try play with the latest FUSE ESB(FUSE ESB is based on apache servicemix and get released more frequently) from [1]
[1]http://repo.open.iona.com/maven2/org/apache/servicemix/apache-servicemix/3.3.1.17-fuse/
Freeman

ppil1 wrote:
Hi on both endpoint i 've set mtomEnabled=true but issue is still the
same.
Only the proxied webservice is a multipart WS.
CxfSe component seems to send a wrong jbi message to cxf bc proxied
endpoint.
Instead of sending a jbi attachement for my fileattach element, coponent
is
sending element in jbi body message.

Thanks for help.

Here my configuration

...
<cxfbc:provider mtomEnabled="true"  wsdl="classpath:service.wsdl"
                      locationURI="http://localhost:8080/test";
                      service="test:HelloOUTService"
                      endpoint="soap"
                        />

.....
<cxfse:endpoint mtomEnabled="true"  >
        <cxfse:pojo>
          <bean class="org.apache.servicemix.test.HelloIn" >
                <property name="myHelloOUT">
                        <cxfse:proxy  service="test:HelloOUTService" 
endpoint="soap"
context="#context" type="org.apache.servicemix.test.HelloOUT" />
                </property>
          </bean>
...

Helloout WSDL
 <wsdl:binding name="HelloOUTSOAPBinding" type="tns:HelloOUT">
        <soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"; />
                <wsdl:operation name="SayHelloOUT">
                        <wsdl:input>
                                <mime:multipartRelated>
                                        <mime:part>
                                                <soap:body parts="request" 
use="literal" />
                                </mime:part>
                                <mime:part>
                                                <mime:content part="fileattach" 
type="text/xml"/>
                                </mime:part>
                                </mime:multipartRelated>

                        </wsdl:input>
                        <wsdl:output>
                                <soap:body use="literal" />
                        </wsdl:output>
                        <wsdl:fault name="UnknownWord">
                                <soap:fault use="literal" name="UnknownWord" />
                        </wsdl:fault>
       </wsdl:operation>
</wsdl:binding>

<wsdl:service name="HelloOUTService">
        <wsdl:port binding="tns:HelloOUTSOAPBinding" name="soap">
           <soap:address
location="http://localhost:8080/HelloOUTService/";
/>
       </wsdl:port>
</wsdl:service>
--
Freeman Fang
------------------------
Open Source SOA: http://fusesource.com






--
Freeman Fang
------------------------
Open Source SOA: http://fusesource.com

Reply via email to