You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ode.apache.org by "Richard Taylor (JIRA)" <ji...@apache.org> on 2007/10/27 00:35:50 UTC

[jira] Commented: (ODE-201) Support for executing SOAP 1.2 services

    [ https://issues.apache.org/jira/browse/ODE-201?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12538124 ] 

Richard Taylor commented on ODE-201:
------------------------------------

Looked into this a bit more...
The issue, at least that I've found so far, is in org.apache.ode.axis2.util.SoapMessageConverter.java.    I was able to get things deploying ok, only to realize that during execution the body in the soap message that is sent at runtime is empty.   

The problem is that SoapMessageConverter has several references to javax.wsdl.extensions.soap.*, such as SOAPBody.class.  This is fine for SOAP 1.1, but when wsdl4j parses a SOAP 1.2 binding, it returns the equivalent classes from the javax.wsdl.extensions.soap12.* package, such as SOAP12Body.class.   While functionally these classes are basically the same, the interfaces are obviously different and SoapMessageConverter assumes the first set of classes.

So the SOAPBinding, SOAPHeader, etc. classes need to either be wrapped in an abstraction (i.e. new Ode interfaces) or SoapMessageConverter needs to extended with some sort of Soap12MessageConverter.   At least those are the two simplest options I see at this point.  Please comment if you think of a simpler approach.

> Support for executing SOAP 1.2 services
> ---------------------------------------
>
>                 Key: ODE-201
>                 URL: https://issues.apache.org/jira/browse/ODE-201
>             Project: ODE
>          Issue Type: Improvement
>          Components: Axis2 Integration
>    Affects Versions: 1.1
>         Environment: Axis2 Distro 
> Jetty 1.6.1.1
> JDK 1.5.0_11
> WinXP64
>            Reporter: Richard Taylor
>            Priority: Minor
>             Fix For: 1.1.1, 1.2
>
>
> I can't seem to invoke a SOAP 1.2 service from a process in Ode.  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.
> 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>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.