I can't seem to invoke a SOAP 1.2 service from a process in Ode.  Have
others encountered this?  It's a silly little "hello world" service written
in .net (for playing with interop).  Ode seems to fail to find the proper
binding for my service/port upon deployment

I believe the issue is in SoapMessageConverter.  In the following line:
Collection<SOAPBinding> soapBindings =
CollectionsX.filter(_binding.getExtensibilityElements(),
SOAPBinding.class);

The call to _binding.getExtensibilityElements() will return
SOAP12Binding.class for SOAP 1.2 bindings, not SOAPBinding.class, so they
get filtered out and aren't found.  You would think SOAPBinding.class and
SOAP12Binding.class would derive from a common base class, but looking at
WSDL4J it doesn't appear that is the case.

Thanks!

During deployment I get the following error:
ERROR [ODEServer]: Could not create external service.
org.apache.ode.axis2.OdeFault: No SOAP binding for port: ServiceSoap12.
        at org.apache.ode.axis2.util.SoapMessageConverter
.<init>(SoapMessageConv
erter.java:127)
        at org.apache.ode.axis2.ExternalService.<init>(ExternalService.java
:89)
        at org.apache.ode.axis2.ODEServer.createExternalService(
ODEServer.java:3
30)
        at org.apache.ode.axis2.BindingContextImpl.createPartnerRoleChannel
(Bind
ingContextImpl.java:81)
        at org.apache.ode.bpel.engine.BpelProcess$HydrationLatch.doHydrate
(BpelP
rocess.java:711)
        at org.apache.ode.bpel.engine.BpelProcess$HydrationLatch.access$1
(BpelPr
ocess.java:681)
        at org.apache.ode.bpel.engine.BpelProcess$HydrationLatch$2.run
(BpelProce
ss.java:666)
        at org.apache.ode.bpel.engine.NStateLatch.latch(NStateLatch.java:89)
        at org.apache.ode.bpel.engine.BpelProcess.hydrate(BpelProcess.java
:547)
        at org.apache.ode.bpel.engine.BpelServerImpl.register(
BpelServerImpl.jav
a:277)
        at org.apache.ode.axis2.ODEServer.handleEvent(ODEServer.java:538)
        at org.apache.ode.axis2.ODEServer.access$100(ODEServer.java:72)
        at
org.apache.ode.axis2.ODEServer$ProcessStoreListenerImpl.onProcessStor
eEvent(ODEServer.java:524)
        at org.apache.ode.store.ProcessStoreImpl.fireEvent(
ProcessStoreImpl.java
:501)
        at org.apache.ode.store.ProcessStoreImpl.fireStateChange
(ProcessStoreImp
l.java:507)
        at org.apache.ode.store.ProcessStoreImpl.deploy(
ProcessStoreImpl.java:28





Here is the WSDL for the service I'm trying to call:
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"; xmlns:soapenc="
http://schemas.xmlsoap.org/soap/encoding/"; xmlns:mime="
http://schemas.xmlsoap.org/wsdl/mime/"; xmlns:tns="http://tempuri.org/";
xmlns:s="http://www.w3.org/2001/XMLSchema"; xmlns:soap12="
http://schemas.xmlsoap.org/wsdl/soap12/"; xmlns:http="
http://schemas.xmlsoap.org/wsdl/http/"; targetNamespace="http://tempuri.org/";
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";>
  <wsdl:types>
    <s:schema elementFormDefault="qualified" targetNamespace="
http://tempuri.org/";>
      <s:element name="HelloWorld">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="name"
type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="HelloWorldResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="HelloWorldResult"
type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
    </s:schema>
  </wsdl:types>
  <wsdl:message name="HelloWorldSoap12In">
    <wsdl:part name="parameters" element="tns:HelloWorld" />
  </wsdl:message>
  <wsdl:message name="HelloWorldSoap12Out">
    <wsdl:part name="parameters" element="tns:HelloWorldResponse" />
  </wsdl:message>
  <wsdl:portType name="ServiceSoap12">
    <wsdl:operation name="HelloWorld">
      <wsdl:input message="tns:HelloWorldSoap12In" />
      <wsdl:output message="tns:HelloWorldSoap12Out" />
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="ServiceSoap12" type="tns:ServiceSoap12">
    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http"; />
    <wsdl:operation name="HelloWorld">
      <soap12:operation soapAction="http://tempuri.org/HelloWorld";
style="document" />
      <wsdl:input>
        <soap12:body use="literal" />
      </wsdl:input>
      <wsdl:output>
        <soap12:body use="literal" />
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="Service">
    <wsdl:port name="ServiceSoap12" binding="tns:ServiceSoap12">
      <soap12:address location="http://localhost:2643/WebSite1/Service.asmx";
/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

Reply via email to