Hi Thilina

    Sorry I attached the wrong axis2.xml which is from axis2 source
directory. I had enabled the MTOM in the axis2.xml. But it is still send
back by value, see[1][2]. Is there any other method to send back attachment
so that the attachmetn is sent by reference? Currently I defined the
attachment variable as OMElement data type.

best regards
donald

[1] the SOAP message captured by TCPMon
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: multipart/related;
boundary=MIMEBoundaryurn_uuid_982443D5B0716BE3521171462576527;
type="application/xop+xml"; start="<
0.urn:uuid:[EMAIL PROTECTED]>";
start-info="text/xml";charset=UTF-8Transfer-Encoding: chunkedDate: Wed, 14
Feb 2007 14:16:16
GMT2ae--MIMEBoundaryurn_uuid_982443D5B0716BE3521171462576527content-type:
application/xop+xml; charset=UTF-8;
type="text/xml";content-transfer-encoding: binarycontent-id:
  <0.urn:uuid:[EMAIL PROTECTED]>
     <?xml version='1.0' encoding='UTF-8'?>
        <soapenv:Envelope xmlns:soapenv="
http://schemas.xmlsoap.org/soap/envelope/";>
           <soapenv:Header />
           <soapenv:Body>
              <ns:transferResponse xmlns:ns="http://ws.apache.org/axis2/xsd
">
                 <ns:return>
                    <test1:downloadFile xmlns:test1="
http://ws.apache.org/axis2/xsd";>aGVsbG8=</test1:downloadFile>
                    <uploadSuccess xmlns="http://ws.apache.org/axis2/xsd
">true</uploadSuccess>
                 </ns:return>
              </ns:transferResponse>
           </soapenv:Body>
        </soapenv:Envelope>

[2] some my source code

public class TestService
{
  ...............
  public TransferResp transfer(String name, String attachment)
 {
          ....................
 }
}

public class TransferResp
{
    ....
    private OMElement downloadFile;

   ....
   public void setDownloadFile(String fileName)
  {

     OMFactory fac = OMAbstractFactory.getOMFactory();
     OMNamespace omNs = fac.createOMNamespace(
             "http://ws.apache.org/axis2/xsd";, "test1");
     downloadFile = fac.createOMElement("downloadFile", omNs);
     File file = new File("d:\\test.txt");
     DataHandler dataHandler = new DataHandler(new FileDataSource(file));
     OMText textData = fac.createOMText(dataHandler, true);
     textData.setOptimize(true);
     textData.setBinary(true);
     downloadFile.addChild(textData);

  }
  public OMElement getDownloadFile()
  {
      return downloadFile;
  }
}
On 2/14/07, Thilina Gunarathne <[EMAIL PROTECTED]> wrote:

Please try enabling MTOM in the Axis2.xml... The axis2.xml which you
have provided does not have MTOM enabled..

Hope you are using TCPMON to sniff the messages...

~Thilina

On 2/13/07, donald yang <[EMAIL PROTECTED]> wrote:
> Hi Thilina,
>
>        Many thanks for your reply. I have alreay enable MTOM in the
> axis2.xml. But the binary data is still sent by value not by reference
> regardless the binary data is sent from client or server. I am attaching
my
> axis2.xml and service.xml, could you please give me a hand?
>
> best regards
> donald
>
>
> On 2/13/07, Thilina Gunarathne < [EMAIL PROTECTED]> wrote:
> >
> > Hi Donald,
> > It is a known issue with Axis2 SOAP monitor.. Axis TCPMON is now
> > separated out in to a ws-commons project [1].
> >
> > Please enable MTOM in the Axis2.xml of the server or in the
> > service.xml of your service.
> > More info [2].
> >
> > Thanks,
> > Thilina
> > [1]http://ws.apache.org/commons/tcpmon/
> > [2] http://wso2.org/library/264
> >
> > On 2/13/07, donald yang <[EMAIL PROTECTED]> wrote:
> > > Hi Thilina,
> > >
> > >       I sent the binary data to my test web service using the source
> code
> > > posted in my previous email. I found that the SOAP messages I got
using
> > > different montior is different. In the SOAP message[1] obtained
using
> > > AXIS1.4 TCPMon, the binary data is sent by reference. In the SOAP
> message
> > > [2] obtained using AXIS2-1.1.1 SOAPMonitor, the binary data is sent
by
> > > value. I don't know why they are different.
> > >
> > >      I also encounter another problem. I can't sent back binary data
by
> > > reference from web service to client. I use both monitors, I saw the
> binary
> > > data is sent by value in both SOAP messages. I have enable MTOM in
> > > axis2.xml. Could you please give me some suggestions?
> > >
> > >      Many thanks in advance.
> > >
> > > best regards
> > > donald
> > >
> > > [1] SOAP message I got using AXIS1.4 TCPMon
> > >
> > > POST /axis2/services/TestService HTTP/1.1
> > > SOAPAction: "urn:anonOutInOp"
> > > User-Agent: Axis2
> > > Host: localhost:9000
> > > Transfer-Encoding: chunked
> > > Content-Type: multipart/related;
> > >
> boundary=MIMEBoundaryurn_uuid_A9972CA35225AAC2E311713669497501;
> > > type="application/xop+xml"; start="<
> > > 0.urn:uuid:[EMAIL PROTECTED]
> >";
> > > start-info="text/xml"; charset=UTF-8
> > > 3c4
> > > --MIMEBoundaryurn_uuid_A9972CA35225AAC2E311713669497501
> > > content-type: application/xop+xml; charset=UTF-8; type="text/xml";
> > > content-transfer-encoding: binary
> > > content-id:
> > >    <
> 0.urn:uuid:[EMAIL PROTECTED]
> > > >
> > >       <?xml version='1.0' encoding='UTF-8'?>
> > >          <soapenv:Envelope xmlns:soapenv="
> > > http://schemas.xmlsoap.org/soap/envelope/ ">
> > >             <soapenv:Header />
> > >             <soapenv:Body>
> > >                <test1:transferMessage xmlns:test1="
> > > http://ws.apache.org/axis2/xsd ">
> > >                   <test1:name>d:\dest.txt</test1:name>
> > >                   <test1:attachment>
> > >                      <xop:Include href="cid:
> > > 1.urn:uuid:[EMAIL PROTECTED]"
> > > xmlns:xop="http://www.w3.org/2004/08/xop/include " />
> > >                   </test1:attachment>
> > >                </test1:transferMessage>
> > >             </soapenv:Body>
> > >
> > >
>
</soapenv:Envelope>--MIMEBoundaryurn_uuid_A9972CA35225AAC2E311713669497501content-type:
> > > text/plaincontent-transfer-encoding: binarycontent-id:
> > >
> > >
> <1.urn:uuid:[EMAIL PROTECTED]
>hello--MIMEBoundaryurn_uuid_A9972CA35225AAC2E311713669497501--0
> > >
> > >
> > > [2] SOAP message I got using AXIS1.1.1 SOAPMontior
> > > <test1:transferMessage xmlns:test1="http://ws.apache.org/axis2/xsd";>
> > >           <test1:name>d:\dest.txt</test1:name>
> > >           <test1:attachment>aGVsbG8=</test1:attachment>
> > > </test1:transferMessage>
> > >
> > > When I decode "aGVsbG8=", the value is "hello" which is content of
the
> file
> > > I sent to web service.
> > >
> > > [3] code to send attachment from server to client
> > > public class TransferResponse
> > > {
> > >
> > >   private OMElement downloadFile;
> > >
> > >   ........................
> > >
> > >   public void setDownloadFile(String fileName)
> > >   {
> > >
> > >       OMFactory fac = OMAbstractFactory.getOMFactory();
> > >       OMNamespace omNs = fac.createOMNamespace(
> > >               " http://ws.apache.org/axis2/xsd";, "test1");
> > >       downloadFile = fac.createOMElement("downloadFile", omNs);
> > >       DataHandler dataHandler = new DataHandler(new
> > >               FileDataSource("d:\\test.txt"));
> > >       OMText textData = fac.createOMText(dataHandler, true);
> > >       textData.setOptimize(true);
> > >       downloadFile.addChild(textData);
> > >   }
> > >
> > > }
> > >
> >
> >
> > --
> > Thilina Gunarathne
> > WSO2, Inc.; http://www.wso2.com/
> > Home page: http://webservices.apache.org/~thilina/
> > Blog: http://thilinag.blogspot.com/
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail:
> [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


--
Thilina Gunarathne
WSO2, Inc.; http://www.wso2.com/
Home page: http://webservices.apache.org/~thilina/
Blog: http://thilinag.blogspot.com/

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


<!--
/*
 * Copyright 2001-2004 The Apache Software Foundation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 -->
 
<axisconfig name="AxisJava2.0">
    <!-- ================================================= -->
    <!-- Parameters -->
    <!-- ================================================= -->
    <parameter name="hotdeployment" locked="false">true</parameter>
    <parameter name="hotupdate" locked="false">true</parameter>
    <parameter name="enableMTOM" locked="false">true</parameter>
    <parameter name="enableSwA" locked="false">false</parameter>

    <!--Uncomment if you want to enable file caching for attachments -->
    <!--parameter name="cacheAttachments" locked="false">true</parameter>
    <parameter name="attachmentDIR" locked="false"></parameter>
    <parameter name="sizeThreshold" locked="false">4000</parameter-->

    <!--This will give out the timout of the configuration contexts, in seconds-->
    <parameter name="ConfigContextTimeoutInterval" locked="false">30</parameter>

    <!--During a fault, stacktrace can be sent with the fault message. The following flag will control -->
    <!--that behaviour.-->
    <parameter name="sendStacktraceDetailsWithFaults" locked="false">false</parameter>

    <!--If there aren't any information available to find out the fault reason, we set the message of the expcetion-->
    <!--as the faultreason/Reason. But when a fault is thrown from a service or some where, it will be -->
    <!--wrapped by different levels. Due to this the initial exception message can be lost. If this flag-->
    <!--is set then, Axis2 tries to get the first exception and set its message as the faultreason/Reason.-->
    <parameter name="DrillDownToRootCauseForFaultReason" locked="false">false</parameter>

    <parameter name="userName" locked="false">admin</parameter>
    <parameter name="password" locked="false">axis2</parameter>

    <!--To override repository/services you need to uncomment following parameter and value SHOULD be absolute file path.-->
    <!--<parameter name="ServicesDirectory" locked="false">service</parameter>-->
    <!--To override repository/modules you need to uncomment following parameter and value SHOULD be absolute file path-->
    <!--<parameter name="ModulesDirectory" locked="false">modules</parameter>-->



    <!--Following params will set the proper context paths for invocations. All the endpoints will have a commons context-->
    <!--root which can configured using the following contextRoot parameter-->
    <!--<parameter name="contextRoot" locked="false">axis2</parameter>-->

    <!--Our HTTP endpoints can handle both REST and SOAP. Following parameters can be used to distingiush those endpoints-->
    <!--In case of a servlet, if you change this you have to manually change the settings of your servlet container to map this -->
    <!--context path to proper Axis2 servlets-->
    <!--<parameter name="servicePath" locked="false">services</parameter>-->
    <!--<parameter name="restPath" locked="false">rest</parameter>-->


    <!--Set the flag to true if you want to enable transport level session mangment-->
    <parameter name="manageTransportSession" locked="false">false</parameter>

    <!--Following two parameters will be used to handle REST in Axis2. The default settings will make Axis2 to have two-->
    <!--different endpoints, one for REST (AxisRESTServlet) one for SOAP message handling (AxisServlet). But following-->
    <!--parameters help to tweak the message handling of two main servlets. -->

    <!-- If the enableRESTInAxis2MainServlet is true, then Axis2MainServlet will handle both SOAP and REST messages -->
    <parameter name="enableRESTInAxis2MainServlet" locked="true">false</parameter>

    <!-- Following parameter will completely disable REST handling in both the servlets-->
    <parameter name="disableREST" locked="true">false</parameter>

    <!-- This will disable the separate servlet we have for REST handling. -->
    <parameter name="disableSeparateEndpointForREST" locked="true">false</parameter>

    <!-- If you have a frontend host which exposes this webservice using a different public URL  -->
    <!-- use this parameter to override autodetected url -->
    <!--<parameter name="httpFrontendHostUrl" locked="false">https://someotherhost/context</parameter>-->


    <!--    The way of adding listener to the system-->
    <!--    <listener class="org.apache.axis2.ObserverIMPL">-->
    <!--        <parameter name="RSS_URL" locked="false">http://127.0.0.1/rss</parameter>-->
    <!--    </listener>-->

    <!-- ================================================= -->
    <!-- Message Receivers -->
    <!-- ================================================= -->
    <!--This is the Deafult Message Receiver for the system , if you want to have MessageReceivers for -->
    <!--all the other MEP implement it and add the correct entry to here , so that you can refer from-->
    <!--any operation -->
    <!--Note : You can ovride this for particular service by adding the same element with your requirement-->
    <messageReceivers>
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only";
                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out";
                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
    </messageReceivers>
    <!-- ================================================= -->
    <!-- Transport Ins -->
    <!-- ================================================= -->
    <transportReceiver name="http"
                       class="org.apache.axis2.transport.http.SimpleHTTPServer">
        <parameter name="port" locked="false">8080</parameter>
        <!-- Here is the complete list of supported parameters (see example settings further below):
            port: the port to listen on (default 6060)
            hostname:  if non-null, url prefix used in reply-to endpoint references                                 (default null)
            originServer:  value of http Server header in outgoing messages                                         (default "Simple-Server/1.1")
            requestTimeout:  value in millis of time that requests can wait for data                                (default 20000)
            requestTcpNoDelay:  true to maximize performance and minimize latency                                   (default true)
                                false to minimize bandwidth consumption by combining segments
            requestCoreThreadPoolSize:  number of threads available for request processing (unless queue fills up)  (default 25)
            requestMaxThreadPoolSize:  number of threads available for request processing if queue fills us         (default 150)
                                       note that default queue never fills up:  see HttpFactory
            threadKeepAliveTime:  time to keep threads in excess of core size alive while inactive                  (default 180)
                                  note that no such threads can exist with default unbounded request queue
            threadKeepAliveTimeUnit:  TimeUnit of value in threadKeepAliveTime (default SECONDS)                    (default SECONDS)
        -->
        <!-- <parameter name="hostname"                  locked="false">http://www.myApp.com/ws</parameter> -->
        <!-- <parameter name="originServer"              locked="false">My-Server/1.1</parameter>           -->
        <!-- <parameter name="requestTimeout"            locked="false">10000</parameter>                   -->
        <!-- <parameter name="requestTcpNoDelay"         locked="false">false</parameter>                   -->
        <!-- <parameter name="requestCoreThreadPoolSize" locked="false">50</parameter>                      -->
        <!-- <parameter name="RequestMaxThreadPoolSize"  locked="false">100</parameter>                     -->
        <!-- <parameter name="threadKeepAliveTime"       locked="false">240000</parameter>                  -->
        <!-- <parameter name="threadKeepAliveTimeUnit"   locked="false">MILLISECONDS</parameter>            -->
    </transportReceiver>
    
    <!--Uncomment this and configure as appropriate for JMS transport support, after setting up your JMS environment (e.g. ActiveMQ)
    <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
        <parameter name="myTopicConnectionFactory" locked="false">        	        	
        	<parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
        	<parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>        	
        	<parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">TopicConnectionFactory</parameter>
        </parameter>

        <parameter name="myQueueConnectionFactory" locked="false">        	        	
        	<parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
        	<parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>        	
        	<parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
        </parameter>

        <parameter name="default" locked="false">        	        	
        	<parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
        	<parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>        	
        	<parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
        </parameter>
    </transportReceiver>-->

    <!--Uncomment if you want to have SMTP transport support-->
    <!--<transportReceiver name="mail" class="org.apache.axis2.transport.mail.SimpleMailListener">-->
    <!--<parameter name="transport.mail.pop3.host" locked="false">127.0.0.1</parameter>-->
    <!--<parameter name="transport.mail.pop3.user" locked="false">axis2</parameter>-->
    <!--<parameter name="transport.mail.pop3.password" locked="false">axis2</parameter>-->
    <!--<parameter name="transport.mail.pop3.port" locked="false">110</parameter>-->
    <!--<parameter name="transport.mail.replyToAddress" locked="false">[EMAIL PROTECTED]</parameter>-->
    <!--</transportReceiver>-->

	<!--Uncomment if you want to have TCP transport support-->
    <!--transportReceiver name="tcp"
                       class="org.apache.axis2.transport.tcp.TCPServer">
        <parameter name="port" locked="false">6060</parameter-->>
        <!--If you want to give your own host address for EPR generation-->
        <!--uncommet following paramter , and set as you required.-->
        <!--<parameter name="hostname" locked="false">tcp://myApp.com/ws</parameter>-->
    <!-- /transportReceiver -->

    <!-- ================================================= -->
    <!-- Transport Outs -->
    <!-- ================================================= -->

    <transportSender name="tcp"
                     class="org.apache.axis2.transport.tcp.TCPTransportSender"/>
    <transportSender name="local"
                     class="org.apache.axis2.transport.local.LocalTransportSender"/>
    <transportSender name="http"
                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
        <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
        <parameter name="Transfer-Encoding" locked="false">chunked</parameter>
    </transportSender>
    <transportSender name="https"
                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
        <parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
        <parameter name="Transfer-Encoding" locked="false">chunked</parameter>
    </transportSender>
    <!--Uncomment this and configure as appropriate for JMS transport support, after setting up your JMS environment (e.g. ActiveMQ)
    <transportSender name="jms"
                     class="org.apache.axis2.transport.jms.JMSSender"/>
    -->

    <!-- Uncomment this one with the appropriate papameters to enable the SMTP transport Receiver
   <transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender">
       <parameter name="transport.mail.smtp.host" locked="false">127.0.0.1</parameter>
       <parameter name="transport.mail.smtp.user" locked="false">axis2</parameter>
       <parameter name="transport.mail.smtp.password" locked="false">axis2</parameter>
       <parameter name="transport.mail.smtp.port" locked="false">25</parameter>
   </transportSender>
   -->

    <!-- ================================================= -->
    <!-- Global Modules  -->
    <!-- ================================================= -->
    <!-- Comment this to disable Addressing -->
    <module ref="addressing"/>
    <module ref="soapmonitor"/>

    <!--Configuring module , providing parameters for modules whether they refer or not-->
    <!--<moduleConfig name="addressing">-->
    <!--<parameter name="addressingPara" locked="false">N/A</parameter>-->
    <!--</moduleConfig>-->

    <!-- ================================================= -->
    <!-- Phases  -->
    <!-- ================================================= -->
    <phaseOrder type="InFlow">
        <!--  System pre defined phases       -->
        <phase name="Transport">
            <handler name="RequestURIBasedDispatcher"
                     class="org.apache.axis2.engine.RequestURIBasedDispatcher">
                <order phase="Transport"/>
            </handler>
            <handler name="SOAPActionBasedDispatcher"
                     class="org.apache.axis2.engine.SOAPActionBasedDispatcher">
                <order phase="Transport"/>
            </handler>
        </phase>
        <phase name="Security"/>
        <phase name="PreDispatch"/>
        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
            <handler name="AddressingBasedDispatcher"
                     class="org.apache.axis2.engine.AddressingBasedDispatcher">
                <order phase="Dispatch"/>
            </handler>

            <handler name="SOAPMessageBodyBasedDispatcher"
                     class="org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher">
                <order phase="Dispatch"/>
            </handler>
            <handler name="InstanceDispatcher"
                     class="org.apache.axis2.engine.InstanceDispatcher">
                <order phase="Dispatch"/>
            </handler>
        </phase>
        <!--  System pre defined phases       -->
        <!--   After Postdispatch phase module author or or service author can add any phase he want      -->
        <phase name="OperationInPhase"/>
	<phase name="soapmonitorPhase"/>
    </phaseOrder>
    <phaseOrder type="OutFlow">
        <!--      user can add his own phases to this area  -->
	<phase name="soapmonitorPhase"/>
        <phase name="OperationOutPhase"/>
        <!--system predefined phase-->
        <!--these phase will run irrespective of the service-->
        <phase name="PolicyDetermination"/>
        <phase name="MessageOut"/>
        <phase name="Security"/>
    </phaseOrder>
    <phaseOrder type="InFaultFlow">
        <phase name="PreDispatch"/>
        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
            <handler name="RequestURIBasedDispatcher"
                     class="org.apache.axis2.engine.RequestURIBasedDispatcher">
                <order phase="Dispatch"/>
            </handler>

            <handler name="SOAPActionBasedDispatcher"
                     class="org.apache.axis2.engine.SOAPActionBasedDispatcher">
                <order phase="Dispatch"/>
            </handler>

            <handler name="AddressingBasedDispatcher"
                     class="org.apache.axis2.engine.AddressingBasedDispatcher">
                <order phase="Dispatch"/>
            </handler>

            <handler name="SOAPMessageBodyBasedDispatcher"
                     class="org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher">
                <order phase="Dispatch"/>
            </handler>
            <handler name="InstanceDispatcher"
                     class="org.apache.axis2.engine.InstanceDispatcher">
                <order phase="PostDispatch"/>
            </handler>
        </phase>
        <!--      user can add his own phases to this area  -->
        <phase name="OperationInFaultPhase"/>
	<phase name="soapmonitorPhase"/>
    </phaseOrder>
    <phaseOrder type="OutFaultFlow">
        <!--      user can add his own phases to this area  -->
	<phase name="soapmonitorPhase"/>
        <phase name="OperationOutFaultPhase"/>
        <phase name="PolicyDetermination"/>
        <phase name="MessageOut"/>
    </phaseOrder>
</axisconfig>

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

Reply via email to