[ 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)