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

Reply via email to