[CXF-5193] Fix anonymous fixed IDL type handling This closes #123
Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/2c00184f Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/2c00184f Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/2c00184f Branch: refs/heads/3.0.x-fixes Commit: 2c00184f7f3e32cb0c1f0ef90a3c411d369aa5a2 Parents: 3203bc6 Author: Grzegorz Grzybek <[email protected]> Authored: Thu Mar 17 13:41:25 2016 +0100 Committer: Daniel Kulp <[email protected]> Committed: Fri Mar 18 12:14:28 2016 -0400 ---------------------------------------------------------------------- .../corba/processors/idl/FixedVisitor.java | 42 ++++++--- .../processors/IDLToWSDLGenerationTest.java | 5 + .../src/test/resources/idl/FixedStruct.idl | 32 +++++++ .../resources/idl/expected_FixedStruct.wsdl | 98 ++++++++++++++++++++ 4 files changed, 166 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/2c00184f/tools/corba/src/main/java/org/apache/cxf/tools/corba/processors/idl/FixedVisitor.java ---------------------------------------------------------------------- diff --git a/tools/corba/src/main/java/org/apache/cxf/tools/corba/processors/idl/FixedVisitor.java b/tools/corba/src/main/java/org/apache/cxf/tools/corba/processors/idl/FixedVisitor.java index 46897b4..75eb81e 100644 --- a/tools/corba/src/main/java/org/apache/cxf/tools/corba/processors/idl/FixedVisitor.java +++ b/tools/corba/src/main/java/org/apache/cxf/tools/corba/processors/idl/FixedVisitor.java @@ -24,6 +24,8 @@ import javax.xml.namespace.QName; import antlr.collections.AST; +import org.apache.cxf.binding.corba.wsdl.Anonfixed; +import org.apache.cxf.binding.corba.wsdl.CorbaType; import org.apache.cxf.binding.corba.wsdl.Fixed; import org.apache.ws.commons.schema.XmlSchema; import org.apache.ws.commons.schema.XmlSchemaFractionDigitsFacet; @@ -79,7 +81,12 @@ public class FixedVisitor extends VisitorBase { AST digitsNode = fixedNode.getFirstChild(); AST scaleNode = digitsNode.getNextSibling(); - Scope scopedName = new Scope(getScope(), identifierNode); + Scope scopedName = null; + if (identifierNode == null) { + scopedName = TypesUtils.generateAnonymousScopedName(getScope(), schema); + } else { + scopedName = new Scope(getScope(), identifierNode); + } // validate digits and scale Long digits = new Long(digitsNode.toString()); @@ -112,17 +119,30 @@ public class FixedVisitor extends VisitorBase { // add xmlschema:fixed setSchemaType(fixedSimpleType); - - // corba:fixed - Fixed corbaFixed = new Fixed(); - corbaFixed.setQName(new QName(typeMap.getTargetNamespace(), scopedName.toString())); - corbaFixed.setDigits(digits); - corbaFixed.setScale(scale); - corbaFixed.setRepositoryID(scopedName.toIDLRepositoryID()); - //corbaFixed.setType(Constants.XSD_DECIMAL); - corbaFixed.setType(fixedSimpleType.getQName()); + CorbaType type = null; + if (identifierNode != null) { + // corba:fixed + Fixed corbaFixed = new Fixed(); + corbaFixed.setQName(new QName(typeMap.getTargetNamespace(), scopedName.toString())); + corbaFixed.setDigits(digits); + corbaFixed.setScale(scale); + corbaFixed.setRepositoryID(scopedName.toIDLRepositoryID()); + //corbaFixed.setType(Constants.XSD_DECIMAL); + corbaFixed.setType(fixedSimpleType.getQName()); + type = corbaFixed; + } else { + // corba:anonfixed + Anonfixed corbaFixed = new Anonfixed(); + corbaFixed.setQName(new QName(typeMap.getTargetNamespace(), scopedName.toString())); + corbaFixed.setDigits(digits); + corbaFixed.setScale(scale); + //corbaFixed.setType(Constants.XSD_DECIMAL); + corbaFixed.setType(fixedSimpleType.getQName()); + typeMap.getStructOrExceptionOrUnion().add(corbaFixed); + type = corbaFixed; + } // add corba:fixed - setCorbaType(corbaFixed); + setCorbaType(type); } } http://git-wip-us.apache.org/repos/asf/cxf/blob/2c00184f/tools/corba/src/test/java/org/apache/cxf/tools/corba/processors/IDLToWSDLGenerationTest.java ---------------------------------------------------------------------- diff --git a/tools/corba/src/test/java/org/apache/cxf/tools/corba/processors/IDLToWSDLGenerationTest.java b/tools/corba/src/test/java/org/apache/cxf/tools/corba/processors/IDLToWSDLGenerationTest.java index e3de3e1..7d47d71 100644 --- a/tools/corba/src/test/java/org/apache/cxf/tools/corba/processors/IDLToWSDLGenerationTest.java +++ b/tools/corba/src/test/java/org/apache/cxf/tools/corba/processors/IDLToWSDLGenerationTest.java @@ -165,6 +165,11 @@ public class IDLToWSDLGenerationTest extends ProcessorTestBase { } @Test + public void testFixedStructGeneration() throws Exception { + testWSDLGeneration("/idl/FixedStruct.idl", "/idl/expected_FixedStruct.wsdl"); + } + + @Test public void testTypedefGeneration() throws Exception { testWSDLGeneration("/idl/Typedef.idl", "/idl/expected_Typedef.wsdl"); } http://git-wip-us.apache.org/repos/asf/cxf/blob/2c00184f/tools/corba/src/test/resources/idl/FixedStruct.idl ---------------------------------------------------------------------- diff --git a/tools/corba/src/test/resources/idl/FixedStruct.idl b/tools/corba/src/test/resources/idl/FixedStruct.idl new file mode 100644 index 0000000..bdcf8e4 --- /dev/null +++ b/tools/corba/src/test/resources/idl/FixedStruct.idl @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. +*/ + +module fixeds +{ + struct FixedStruct + { + string<5> oddString; + fixed<5,2> oddFixed; + }; + + interface FunctionTest + { + FixedStruct testFixeds(in FixedStruct aFixedStruct); + }; +}; http://git-wip-us.apache.org/repos/asf/cxf/blob/2c00184f/tools/corba/src/test/resources/idl/expected_FixedStruct.wsdl ---------------------------------------------------------------------- diff --git a/tools/corba/src/test/resources/idl/expected_FixedStruct.wsdl b/tools/corba/src/test/resources/idl/expected_FixedStruct.wsdl new file mode 100644 index 0000000..7036f11 --- /dev/null +++ b/tools/corba/src/test/resources/idl/expected_FixedStruct.wsdl @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. +--> +<wsdl:definitions xmlns:corba="http://cxf.apache.org/bindings/corba" xmlns:tns="http://cxf.apache.org/bindings/corba/idl/FixedStruct" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://cxf.apache.org/bindings/corba/idl/FixedStruct"> + <corba:typeMapping xmlns:corba="http://cxf.apache.org/bindings/corba" targetNamespace="http://cxf.apache.org/bindings/corba/idl/FixedStruct/typemap"> + <corba:anonstring xmlns:tns="http://cxf.apache.org/bindings/corba/idl/FixedStruct" bound="5" name="fixeds._Anon1_FixedStruct" type="tns:fixeds._Anon1_FixedStruct" /> + <corba:anonfixed xmlns:tns="http://cxf.apache.org/bindings/corba/idl/FixedStruct" digits="5" name="fixeds._Anon2_FixedStruct" scale="2" type="tns:fixeds._Anon2_FixedStruct"/> + <corba:struct xmlns:tns="http://cxf.apache.org/bindings/corba/idl/FixedStruct" name="fixeds.FixedStruct" repositoryID="IDL:fixeds/FixedStruct:1.0" type="tns:fixeds.FixedStruct"> + <corba:member xmlns="http://cxf.apache.org/bindings/corba/idl/FixedStruct/typemap" idltype="fixeds._Anon1_FixedStruct" name="oddString" /> + <corba:member xmlns="http://cxf.apache.org/bindings/corba/idl/FixedStruct/typemap" idltype="fixeds._Anon2_FixedStruct" name="oddFixed" /> + </corba:struct> + </corba:typeMapping> + <wsdl:types> + <xs:schema xmlns="http://cxf.apache.org/bindings/corba/idl/FixedStruct" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://cxf.apache.org/bindings/corba/idl/FixedStruct"> + <xs:complexType name="fixeds.FixedStruct"> + <xs:sequence> + <xs:element name="oddString" type="fixeds._Anon1_FixedStruct" /> + <xs:element name="oddFixed" type="fixeds._Anon2_FixedStruct" /> + </xs:sequence> + </xs:complexType> + <xs:simpleType name="fixeds._Anon1_FixedStruct"> + <xs:restriction base="xs:string"> + <xs:maxLength value="5" /> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="fixeds._Anon2_FixedStruct"> + <xs:restriction base="xs:decimal"> + <xs:totalDigits value="5" /> + <xs:fractionDigits fixed="true" value="2" /> + </xs:restriction> + </xs:simpleType> + <xs:element name="testFixeds"> + <xs:complexType> + <xs:sequence> + <xs:element name="aFixedStruct" type="fixeds.FixedStruct" /> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="testFixedsResponse"> + <xs:complexType> + <xs:sequence> + <xs:element name="return" type="fixeds.FixedStruct" /> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:schema> + </wsdl:types> + <wsdl:message name="testFixeds"> + <wsdl:part element="tns:testFixeds" name="inparameter"> + </wsdl:part> + </wsdl:message> + <wsdl:message name="testFixedsResponse"> + <wsdl:part element="tns:testFixedsResponse" name="outparameter"> + </wsdl:part> + </wsdl:message> + <wsdl:portType name="fixeds.FunctionTest"> + <wsdl:operation name="testFixeds"> + <wsdl:input message="tns:testFixeds" name="testFixedsRequest"> + </wsdl:input> + <wsdl:output message="tns:testFixedsResponse" name="testFixedsResponse"> + </wsdl:output> + </wsdl:operation> + </wsdl:portType> + <wsdl:binding name="fixeds.FunctionTestCORBABinding" type="tns:fixeds.FunctionTest"> + <corba:binding xmlns:corba="http://cxf.apache.org/bindings/corba" repositoryID="IDL:fixeds/FunctionTest:1.0" /> + <wsdl:operation name="testFixeds"> + <corba:operation xmlns:corba="http://cxf.apache.org/bindings/corba" name="testFixeds"> + <corba:param xmlns="http://cxf.apache.org/bindings/corba/idl/FixedStruct/typemap" idltype="fixeds.FixedStruct" mode="in" name="aFixedStruct" /> + <corba:return xmlns="http://cxf.apache.org/bindings/corba/idl/FixedStruct/typemap" idltype="fixeds.FixedStruct" name="return" /> + </corba:operation> + <wsdl:input name="testFixedsRequest"> + </wsdl:input> + <wsdl:output name="testFixedsResponse"> + </wsdl:output> + </wsdl:operation> + </wsdl:binding> + <wsdl:service name="fixeds.FunctionTestCORBAService"> + <wsdl:port binding="tns:fixeds.FunctionTestCORBABinding" name="fixeds.FunctionTestCORBAPort"> + <corba:address xmlns:corba="http://cxf.apache.org/bindings/corba" location="IOR:" /> + </wsdl:port> + </wsdl:service> +</wsdl:definitions>
