You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ofbiz.apache.org by "Jacques Le Roux (Jira)" <ji...@apache.org> on 2020/09/10 06:54:00 UTC

[jira] [Commented] (OFBIZ-11999) WSDL does not correspondent to response and is invalid

    [ https://issues.apache.org/jira/browse/OFBIZ-11999?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17193410#comment-17193410 ] 

Jacques Le Roux commented on OFBIZ-11999:
-----------------------------------------

Hi Dominik,

Are there only syntax issues or did you cross other issues as well? Because, for instance, map-HashMap is only a conventional name in XmlSerializer::serializeSingle and it could be changes easily in all OFBiz is that's all the problem.

> WSDL does not correspondent to response and is invalid 
> -------------------------------------------------------
>
>                 Key: OFBIZ-11999
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-11999
>             Project: OFBiz
>          Issue Type: Bug
>          Components: framework/service
>    Affects Versions: Release Branch 17.12
>            Reporter: Dominik B
>            Priority: Major
>              Labels: soap
>
> I'm new to OFBiz and tried to use its SOAP service. However, I think there's something wrong with the generated WSDL.
>  
> Let's take for example findProductById, which generates the follow WSDL:
> {code:java}
> <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ofbiz.apache.org/service/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ofbiz.apache.org/service/">
>     <wsdl:types>
>         <xsd:schema targetNamespace="http://ofbiz.apache.org/service/">
>             <xsd:element name="null" nillable="true">
>                 <xsd:complexType>
>                     <xsd:attribute name="value" type="xsd:string" use="required" />
>                 </xsd:complexType>
>             </xsd:element>
>             <xsd:element name="std-String">
>                 <xsd:complexType>
>                     <xsd:attribute name="value" type="xsd:string" use="required" />
>                 </xsd:complexType>
>             </xsd:element>
>             <xsd:element name="std-Integer">
>                 <xsd:complexType>
>                     <xsd:attribute name="value" type="xsd:integer" use="required" />
>                 </xsd:complexType>
>             </xsd:element>
>             <xsd:element name="std-Long">
>                 <xsd:complexType>
>                     <xsd:attribute name="value" type="xsd:long" use="required" />
>                 </xsd:complexType>
>             </xsd:element>
>             <xsd:element name="std-Float">
>                 <xsd:complexType>
>                     <xsd:attribute name="value" type="xsd:float" use="required" />
>                 </xsd:complexType>
>             </xsd:element>
>             <xsd:element name="std-Double">
>                 <xsd:complexType>
>                     <xsd:attribute name="value" type="xsd:double" use="required" />
>                 </xsd:complexType>
>             </xsd:element>
>             <xsd:element name="std-Boolean">
>                 <xsd:complexType>
>                     <xsd:attribute name="value" type="xsd:boolean" use="required" />
>                 </xsd:complexType>
>             </xsd:element>
>             <xsd:element name="std-Locale">
>                 <xsd:complexType>
>                     <xsd:attribute name="value" type="xsd:string" use="required" />
>                 </xsd:complexType>
>             </xsd:element>
>             <xsd:element name="std-BigDecimal">
>                 <xsd:complexType>
>                     <xsd:attribute name="value" type="xsd:decimal" use="required" />
>                 </xsd:complexType>
>             </xsd:element>
>             <xsd:element name="sql-Timestamp">
>                 <xsd:complexType>
>                     <xsd:attribute name="value" type="xsd:dateTime" use="required" />
>                 </xsd:complexType>
>             </xsd:element>
>             <xsd:element name="sql-Date">
>                 <xsd:complexType>
>                     <xsd:attribute name="value" type="xsd:date" use="required" />
>                 </xsd:complexType>
>             </xsd:element>
>             <xsd:element name="sql-Time">
>                 <xsd:complexType>
>                     <xsd:attribute name="value" type="xsd:time" use="required" />
>                 </xsd:complexType>
>             </xsd:element>
>             <xsd:element name="col-ArrayList" type="tns:col-Collection" />
>             <xsd:element name="col-LinkedList" type="tns:col-Collection" />
>             <xsd:element name="col-Stack" type="tns:col-Collection" />
>             <xsd:element name="col-Vector" type="tns:col-Collection" />
>             <xsd:element name="col-TreeSet" type="tns:col-Collection" />
>             <xsd:element name="col-HashSet" type="tns:col-Collection" />
>             <xsd:element name="col-Collection" type="tns:col-Collection" />
>             <xsd:element name="map-TreeMap" type="tns:map-Map" />
>             <xsd:element name="map-WeakHashMap" type="tns:map-Map" />
>             <xsd:element name="map-Hashtable" type="tns:map-Map" />
>             <xsd:element name="map-Properties" type="tns:map-Map" />
>             <xsd:element name="map-HashMap" type="tns:map-Map" />
>             <xsd:element name="map-Map" type="tns:map-Map" />
>             <xsd:element name="map-Entry" type="tns:map-Entry" />
>             <xsd:element name="map-Key" type="tns:map-Key" />
>             <xsd:element name="map-Value" type="tns:map-Value" />
>             <xsd:element name="eepk-" type="tns:map-Map">
>                 <xsd:annotation>
>                     <xsd:documentation>The name of element need to be appended with name of entity such as eepk-Product for Product entity.</xsd:documentation>
>                 </xsd:annotation>
>             </xsd:element>
>             <xsd:element name="eeval-" type="tns:map-Map">
>                 <xsd:annotation>
>                     <xsd:documentation>The name of element need to be appended with name of entity such as eeval-Product for Product entity.</xsd:documentation>
>                 </xsd:annotation>
>             </xsd:element>
>             <xsd:element name="cus-obj">
>                 <xsd:annotation>
>                     <xsd:documentation>Object content is hex encoded so does not need to be in a CDATA block.</xsd:documentation>
>                 </xsd:annotation>
>             </xsd:element>
>             <xsd:complexType name="map-Map">
>                 <xsd:sequence>
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:map-Entry" />
>                 </xsd:sequence>
>             </xsd:complexType>
>             <xsd:complexType name="map-Entry">
>                 <xsd:sequence>
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:map-Key" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:map-Value" />
>                 </xsd:sequence>
>             </xsd:complexType>
>             <xsd:complexType name="map-Key">
>                 <xsd:all>
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:std-String" />
>                 </xsd:all>
>             </xsd:complexType>
>             <xsd:complexType name="map-Value">
>                 <xsd:choice>
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:null" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:std-String" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:std-Integer" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:std-Long" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:std-Float" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:std-Double" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:std-Boolean" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:std-Locale" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:sql-Timestamp" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:sql-Date" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:sql-Time" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:col-ArrayList" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:col-LinkedList" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:col-Stack" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:col-Vector" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:col-TreeSet" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:col-HashSet" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:col-Collection" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:map-HashMap" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:map-Properties" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:map-Hashtable" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:map-WeakHashMap" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:map-TreeMap" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:map-Map" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:eepk-" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:eeval-" />
>                     <xsd:element maxOccurs="1" minOccurs="1" ref="tns:std-BigDecimal" />
>                 </xsd:choice>
>             </xsd:complexType>
>             <xsd:complexType name="col-Collection">
>                 <xsd:choice>
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:null" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:std-String" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:std-Integer" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:std-Long" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:std-Float" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:std-Double" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:std-Boolean" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:std-Locale" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:sql-Timestamp" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:sql-Date" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:sql-Time" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:col-ArrayList" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:col-LinkedList" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:col-Stack" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:col-Vector" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:col-TreeSet" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:col-HashSet" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:col-Collection" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:map-HashMap" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:map-Properties" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:map-Hashtable" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:map-WeakHashMap" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:map-TreeMap" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:map-Map" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:eepk-" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:eeval-" />
>                     <xsd:element maxOccurs="unbounded" minOccurs="0" ref="tns:std-BigDecimal" />
>                 </xsd:choice>
>             </xsd:complexType>
>         </xsd:schema>
>     </wsdl:types>
>     <wsdl:message name="findProductByIdRequest">
>         <wsdl:part name="map-Map" type="tns:map-Map">
>             <wsdl:documentation>
>                 <attribute java-class="String" name="goodIdentificationTypeId" namespace="http://ofbiz.apache.org/service/" optional="true" type="std-String" />
>                 <attribute java-class="String" name="idToFind" namespace="http://ofbiz.apache.org/service/" optional="false" type="std-String" />
>                 <attribute java-class="String" name="searchAllId" namespace="http://ofbiz.apache.org/service/" optional="true" type="std-String" />
>                 <attribute java-class="String" name="searchProductFirst" namespace="http://ofbiz.apache.org/service/" optional="true" type="std-String" />
>                 <attribute java-class="java.lang.String" name="login.username" namespace="http://ofbiz.apache.org/service/" optional="false" type="std-String" />
>                 <attribute java-class="java.lang.String" name="login.password" namespace="http://ofbiz.apache.org/service/" optional="false" type="std-String" />
>             </wsdl:documentation>
>         </wsdl:part>
>     </wsdl:message>
>     <wsdl:message name="findProductByIdResponse">
>         <wsdl:part name="map-Map" type="tns:map-Map">
>             <wsdl:documentation>
>                 <attribute java-class="org.apache.ofbiz.entity.GenericValue" name="product" namespace="http://ofbiz.apache.org/service/" optional="true" type="eeval-" />
>                 <attribute java-class="List" name="productsList" namespace="http://ofbiz.apache.org/service/" optional="true" type="col-LinkedList" />
>             </wsdl:documentation>
>         </wsdl:part>
>     </wsdl:message>
>     <wsdl:portType name="findProductByIdPortType">
>         <wsdl:operation name="findProductById">
>             <wsdl:input message="tns:findProductByIdRequest" />
>             <wsdl:output message="tns:findProductByIdResponse" />
>         </wsdl:operation>
>     </wsdl:portType>
>     <wsdl:binding name="findProductByIdSoapBinding" type="tns:findProductByIdPortType">
>         <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
>         <wsdl:operation name="findProductById">
>             <soap:operation soapAction="http://localhost:8080/webtools/control/SOAPService" style="rpc" />
>             <wsdl:input>
>                 <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ofbiz.apache.org/service/" use="literal" />
>             </wsdl:input>
>             <wsdl:output>
>                 <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://ofbiz.apache.org/service/" use="literal" />
>             </wsdl:output>
>         </wsdl:operation>
>     </wsdl:binding>
>     <wsdl:service name="findProductById">
>         <wsdl:port binding="tns:findProductByIdSoapBinding" name="findProductByIdPort">
>             <soap:address location="http://localhost:8080/webtools/control/SOAPService" />
>         </wsdl:port>
>     </wsdl:service>
> </wsdl:definitions>
> {code}
> Now take a look at my request:
> {code:java}
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://ofbiz.apache.org/service/">
>     <soapenv:Header />
>     <soapenv:Body>
>         <ser:findProductById>
>             <map-Map>
>                 <ser:map-Entry>
>                     <ser:map-Key>
>                         <ser:std-String value="idToFind" />
>                     </ser:map-Key>
>                     <ser:map-Value>
>                         <ser:std-String value="FORKLIFT_PROPANE" />
>                     </ser:map-Value>
>                 </ser:map-Entry>
>                 <ser:map-Entry>
>                     <ser:map-Key>
>                         <ser:std-String value="login.username" />
>                     </ser:map-Key>
>                     <ser:map-Value>
>                         <ser:std-String value="admin" />
>                     </ser:map-Value>
>                 </ser:map-Entry>
>                 <ser:map-Entry>
>                     <ser:map-Key>
>                         <ser:std-String value="login.password" />
>                     </ser:map-Key>
>                     <ser:map-Value>
>                         <ser:std-String value="ofbiz" />
>                     </ser:map-Value>
>                 </ser:map-Entry>
>             </map-Map>
>         </ser:findProductById>
>     </soapenv:Body>
> </soapenv:Envelope>
> {code}
>  
> And here's the response:
> {code:java}
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
>     <soapenv:Body>
>         <findProductByIdResponse xmlns="http://ofbiz.apache.org/service/">
>             <HashMap-Map>
>                 <map-Entry>
>                     <map-Key>
>                         <std-String value="product" />
>                     </map-Key>
>                     <map-Value>
>                         <eeval-Product createdStamp="2020-09-03 13:49:51.379" createdTxStamp="2020-09-03 13:49:51.379" description="Forklift - Propane Powered." internalName="Forklift - Propane" lastUpdatedStamp="2020-09-03 13:49:51.379" lastUpdatedTxStamp="2020-09-03 13:49:51.379" productId="FORKLIFT_PROPANE" productName="Forklift - Propane" productTypeId="ASSET_USAGE" />
>                     </map-Value>
>                 </map-Entry>
>                 <map-Entry>
>                     <map-Key>
>                         <std-String value="productsList" />
>                     </map-Key>
>                     <map-Value>
>                         <col-LinkedList />
>                     </map-Value>
>                 </map-Entry>
>                 <map-Entry>
>                     <map-Key>
>                         <std-String value="responseMessage" />
>                     </map-Key>
>                     <map-Value>
>                         <std-String value="success" />
>                     </map-Value>
>                 </map-Entry>
>             </HashMap-Map>
>         </findProductByIdResponse>
>     </soapenv:Body>
> </soapenv:Envelope>
> {code}
> I think there are several problems here:
> 1. HashMap-Map should be map-Map, according to the wsdl:  <wsdl:part name="map-Map" type="tns:map-Map">
> 2. Not sure about this, but I guess HashMap-Map (actually map-Map) should not be in namespace "http://ofbiz.apache.org/service/"
> 3. There is no definition for "eeval-Product" but there is on for just "eeval-". 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)