I'm afraid that doesn't solve the problem. To simply things, I've replaced my
ServiceMix written service with a truly external web service written in
.NET.

Here's the WSDL:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd";
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";
xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata";
xmlns:tns="http://tempuri.org/";
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing";
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy";
xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract";
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl";
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/";
xmlns:wsa10="http://www.w3.org/2005/08/addressing";
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex"; name="HowdyWorld"
targetNamespace="http://tempuri.org/";>
  <wsdl:types>
    <xsd:schema targetNamespace="http://tempuri.org/Imports";>
      <xsd:import
schemaLocation="http://localhost:1234/HowdyWorld.svc?xsd=xsd0";
namespace="http://tempuri.org/"/>
      <xsd:import
schemaLocation="http://localhost:1234/HowdyWorld.svc?xsd=xsd1";
namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
    </xsd:schema>
  </wsdl:types>
  <wsdl:message name="IHowdyWorld_Howdy_InputMessage">
    <wsdl:part name="parameters" element="tns:Howdy"/>
  </wsdl:message>
  <wsdl:message name="IHowdyWorld_Howdy_OutputMessage">
    <wsdl:part name="parameters" element="tns:HowdyResponse"/>
  </wsdl:message>
  <wsdl:portType name="IHowdyWorld">
    <wsdl:operation name="Howdy">
      <wsdl:input wsaw:Action="http://tempuri.org/IHowdyWorld/Howdy";
message="tns:IHowdyWorld_Howdy_InputMessage"/>
      <wsdl:output
wsaw:Action="http://tempuri.org/IHowdyWorld/HowdyResponse";
message="tns:IHowdyWorld_Howdy_OutputMessage"/>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="BasicHttpBinding_IHowdyWorld" type="tns:IHowdyWorld">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="Howdy">
      <soap:operation soapAction="http://tempuri.org/IHowdyWorld/Howdy";
style="document"/>
      <wsdl:input>
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="HowdyWorld">
    <wsdl:port name="BasicHttpBinding_IHowdyWorld"
binding="tns:BasicHttpBinding_IHowdyWorld">
      <soap:address location="http://localhost:1234/HowdyWorld.svc"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

When I use a cxf-bc consumer component to consume incoming responses via
SOAP and forward them on to a cxf-bc provider component that references this
external web service, it works when I test via SoapUI.

However, when I replace the cxf-bc consumer with a file poller and send
messages in via copying them to my directory it fails.

Here are my latest configurations:
<cxfbc:provider wsdl="http://localhost:1234/HowdyWorld.svc?wsdl";
      service="howdy:HowdyWorld" 
      endpoint="howdy:BasicHttpBinding_IHowdyWorld"
      locationURI="http://localhost:1234/HowdyWorld.svc";
      useJBIWrapper="false" />

<file:poller service="mock:TestMessageService"
      endpoint="FilePoller"
      targetService="howdy:HowdyWorld"
      targetEndpoint="howdy:BasicHttpBinding_IHowdyWorld"
      targetInterface="howdy:Howdy"
      file="${mock.inbound}" />

I'm using a file with this content:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:tem="http://tempuri.org/";>
   <soapenv:Header/>
   <soapenv:Body>
      <tem:Howdy>
         <!--Optional:-->
         <tem:value>John Doe</tem:value>
      </tem:Howdy>
   </soapenv:Body>
</soapenv:Envelope>

I get this result in the log file:
InOnly[
  id: ID:172.17.165.202-124062c87e0-6:6
  status: Active
  role: provider
  interface: {http://tempuri.org/}Howdy
  service: {http://tempuri.org/}HowdyWorld
  endpoint: howdy:BasicHttpBinding_IHowdyWorld
  in: <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:tem="http://tempuri.org/";>
   <soapenv:Header/>
   <soapenv:Body>
      <tem:Howdy>
         <tem:value>John Doe</tem:value>
      </tem:Howdy>
   </soapenv:Body>
</soapenv:Envelope>
]

10:59:08,570 | INFO  | pool-flow.seda.servicemix-cxf-bc-thread-14 |
PhaseInterceptorChain    | he.cxf.common.logging.LogUtils  345 | Interceptor
has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: org.apache.xerces.dom.DeferredTextImpl
cannot be cast to org.w3c.dom.Element at
org.apache.servicemix.cxfbc.interceptors.JbiOutWsdl1Interceptor.handleMessage(JbiOutWsdl1Interceptor.java:149)
at
org.apache.servicemix.cxfbc.interceptors.JbiOutWsdl1Interceptor.handleMessage(JbiOutWsdl1Interceptor.java:56)
...

My understanding was that an XML file that is fed to a file poller will get
normalized and then passed on to its target JBI service and endpoint.

Since I've hooked my file poller up to my cxf-bc provider, it should then
receive normalized JBI messages and unwrap them and send the remaining SOAP
message on to my external web service.

Is my understanding incorrect?

Thanks.


Freeman Fang wrote:
> 
> Just as Johan point out, add useJBIWrapper="false" attribute for your  
> cxf bc provider endpoint configuration.
> Freeman
> On 2009-9-29, at 上午8:03, Johan Edstrom wrote:
> 
>> Either create a JBI message or set JBIWrapper to false on the  
>> binding component.
>>
>>
> -- 
> Freeman Fang
> ------------------------
> Open Source SOA: http://fusesource.com
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Sending-messages-via-a-file-poller-into-a-cxf-bc-provider-endpoint-tp25654650p25664884.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.

Reply via email to