chemistry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dalibor Jacko2" <Dalibor.Jac...@sk.ibm.com>
Subject ref element not allowed
Date Wed, 05 Apr 2017 12:58:32 GMT

Hi,

I think I have found a bug. I'm using apache-cxf and cannot use query
operation from generated class DiscoveryServicePort
( chemistry-opencmis-commons-impl-0.10.0.jar ). I have found workaround.

It is necessary to edit file directly in library distribution
chemistry-opencmis-commons-impl-0.10.0.jar\wsdl\cmis11\CMIS-Messaging.xsd
under xml node
<xs:element name="query">
remove <xs:attributeGroup ref="cmis:cmisUndefinedAttribute" /> line 1756


Let me explain how this workaround works.
DiscoveryServicePort contain query method with 9 parameters. This mean that
it is expected WRAPPED style. According to JAX-WS specification it is not
allowed to use "ref" attribute when you want to use Wrapper soap style.
Since 'ref' attribute is presented apache-cxf believe that query method
will have only one parameter (NON-WRAPPED style) and failed to map values
to parameters.


According to DiscoveryServicePort interface included in library
distribution you are expected Wrapped style.
chemistry-opencmis-commons-impl-0.10.0.jar
\org.apache.chemistry.opencmis.commons.impl.jaxb.DiscoveryServicePort query
method have nine 'in' parameters

public interface DiscoveryServicePort {
@WebMethod(action = "query")
@WebResult(name = "objects", targetNamespace = "
http://docs.oasis-open.org/ns/cmis/messaging/200908/")
@RequestWrapper(localName = "query", targetNamespace = "
http://docs.oasis-open.org/ns/cmis/messaging/200908/", className =
"org.apache.chemistry.opencmis.commons.impl.jaxb.Query")
@ResponseWrapper(localName = "queryResponse", targetNamespace = "
http://docs.oasis-open.org/ns/cmis/messaging/200908/", className =
"org.apache.chemistry.opencmis.commons.impl.jaxb.QueryResponse")
public CmisObjectListType query(
    @WebParam(name = "repositoryId", targetNamespace = "
http://docs.oasis-open.org/ns/cmis/messaging/200908/")
    String repositoryId,
    @WebParam(name = "statement", targetNamespace = "
http://docs.oasis-open.org/ns/cmis/messaging/200908/")
    String statement,
    @WebParam(name = "searchAllVersions", targetNamespace = "
http://docs.oasis-open.org/ns/cmis/messaging/200908/")
    Boolean searchAllVersions,
    @WebParam(name = "includeAllowableActions", targetNamespace = "
http://docs.oasis-open.org/ns/cmis/messaging/200908/")
    Boolean includeAllowableActions,
    @WebParam(name = "includeRelationships", targetNamespace = "
http://docs.oasis-open.org/ns/cmis/messaging/200908/")
    EnumIncludeRelationships includeRelationships,
    @WebParam(name = "renditionFilter", targetNamespace = "
http://docs.oasis-open.org/ns/cmis/messaging/200908/")
    String renditionFilter,
    @WebParam(name = "maxItems", targetNamespace = "
http://docs.oasis-open.org/ns/cmis/messaging/200908/")
    BigInteger maxItems,
    @WebParam(name = "skipCount", targetNamespace = "
http://docs.oasis-open.org/ns/cmis/messaging/200908/")
    BigInteger skipCount,
    @WebParam(name = "extension", targetNamespace = "
http://docs.oasis-open.org/ns/cmis/messaging/200908/")
    CmisExtensionType extension)
    throws CmisException
;

Since there is not allowed 'ref' attribute Apache-cxf will try to handle
'soap message marshaling' with non-wrapped style (BARE style) only one 'in'
parameter

public interface DiscoveryServicePort {
@WebMethod(action = "query")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@WebResult(name = "queryResponse", targetNamespace = "
http://docs.oasis-open.org/ns/cmis/messaging/200908/", partName =
"parameters")
public org.oasis_open.docs.ns.cmis.messaging._200908.QueryResponse query(
    @WebParam(partName = "parameters", name = "query", targetNamespace = "
http://docs.oasis-open.org/ns/cmis/messaging/200908/")
    org.oasis_open.docs.ns.cmis.messaging._200908.Query parameters
) throws CmisException;




---------------------------------------------------------------------------------------------

I'm attaching few more information directly from JAX-WS specification :
http://download.oracle.com/otn-pub/jcp/jaxws-2.2-mrel3-evalu-oth-JSpec/jaxws-2_2-mrel3-spec.pdf?AuthParam=1491387529_7c735ef7094195c9f9bd00699bd49534


page 14
2.3.1.2 Wrapper Style
A WSDL operation qualifies for wrapper style mapping only if the following
criteria are met:
(i) The operation’s input and output messages (if present) each contain
only a single part
(ii) The input message part refers to a global element declaration whose
localname is equal to the operation
name
(iii) The output message (if present) part refers to a global element
declaration
(iv) The elements referred to by the input and output message (if present)
parts (henceforth referred to as
wrapper elements) are both complex types defined using the xsd:sequence
compositor
(v) The wrapper elements only contain child elements, they MUST not contain
other structures such
as wildcards (element or attribute), xsd:choice, substitution groups (

ELEMENT REFERENCES ARE NOT PERMITTED

 )
 or attributes; furthermore, they MUST not be nillable.
♦ Conformance (Default mapping mode): Operations that do not meet the
criteria above MUST be mapped
using non-wrapper style.

---------------------------------------------------------------------------------------------

chemistry-opencmis-commons-impl-0.10.0.jar\wsdl\CMIS-Messaging.xsd

<xs:element name="query">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="repositoryId" type="xs:string"
                    minOccurs="1" maxOccurs="1" />
                <xs:element name="statement" type="xs:string" minOccurs="1"
                    maxOccurs="1" />
                <xs:element name="searchAllVersions" type="xs:boolean"
                    minOccurs="0" maxOccurs="1" nillable="true" />
                <xs:element name="includeAllowableActions"
type="xs:boolean"
                    minOccurs="0" maxOccurs="1" nillable="true" />
                <xs:element name="includeRelationships"
type="cmis:enumIncludeRelationships"
                    minOccurs="0" maxOccurs="1" nillable="true" />
                <xs:element name="renditionFilter" type="xs:string"
                    minOccurs="0" maxOccurs="1" nillable="true" />
                <xs:element name="maxItems" type="xs:integer" minOccurs="0"
                    maxOccurs="1" nillable="true" />
                <xs:element name="skipCount" type="xs:integer"
minOccurs="0"
                    maxOccurs="1" nillable="true" />
                <xs:element name="extension" type="cmism:cmisExtensionType"
                    minOccurs="0" maxOccurs="1" nillable="true">
                    <xs:annotation>
                        <xs:documentation>
                            This is an extension element to hold any
                            repository or
                            vendor-specific extensions
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>
       <!--     <xs:attributeGroup ref="cmis:cmisUndefinedAttribute" />
----------------------   not allowed with WRAPPING style-->
        </xs:complexType>
    </xs:element>

Regards

Dalibor Jacko 	 Slovakia
IBM Slovakia
e-mail: 	dalibor.jacko2@sk.ibm.com

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message