You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2008/07/22 22:42:43 UTC

svn commit: r678891 - in /cxf/trunk/tools/wsdlto: frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customization/ frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ test/src/test/java/org/...

Author: dkulp
Date: Tue Jul 22 13:42:43 2008
New Revision: 678891

URL: http://svn.apache.org/viewvc?rev=678891&view=rev
Log:
[CXF-1620] Support for jaxb:extensionBindingPrefix attributes (and thus the xjc:simple things and such)


Added:
    cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/jaxb_custom_extensors.wsdl   (with props)
    cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/jaxb_custom_extensors.xjb   (with props)
Modified:
    cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customization/CustomizationParser.java
    cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ProcessorUtil.java
    cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java

Modified: cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customization/CustomizationParser.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customization/CustomizationParser.java?rev=678891&r1=678890&r2=678891&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customization/CustomizationParser.java (original)
+++ cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customization/CustomizationParser.java Tue Jul 22 13:42:43 2008
@@ -33,8 +33,10 @@
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
+import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
@@ -234,6 +236,9 @@
         for (Node childNode = jaxwsBindingNode.getFirstChild();
             childNode != null;
             childNode = childNode.getNextSibling()) {
+            
+            copyJaxbAttributes(childNode, (Element)schemaNode);
+            
             if (!isJaxbBindings(childNode)) {
                 continue;
             }
@@ -246,8 +251,18 @@
                     copyAllJaxbDeclarations(node, childEl);
                 }
             } else {
-                final Node jaxbNode = childEl;
-                Node cloneNode = ProcessorUtil.cloneNode(schemaNode.getOwnerDocument(), jaxbNode, true);
+                Element cloneNode = (Element)ProcessorUtil.cloneNode(schemaNode.getOwnerDocument(), 
+                                                                     childEl, true);
+                
+                NamedNodeMap atts = cloneNode.getAttributes();
+                for (int x = 0; x < atts.getLength(); x++) {
+                    Attr attr = (Attr)atts.item(x);
+                    if (ToolConstants.NS_JAXB_BINDINGS.equals(attr.getNamespaceURI())) {
+                        cloneNode.removeAttributeNode(attr);
+                        atts = cloneNode.getAttributes();
+                        x = -1;
+                    }
+                }
                 appinfoNode.appendChild(cloneNode);
                 childNode = childNode.getNextSibling();
             }
@@ -260,6 +275,38 @@
         }
     }
 
+    private void copyJaxbAttributes(Node childNode, Element schemaNode) {
+        if (childNode instanceof Element) {
+            Element el = (Element)childNode;
+            NamedNodeMap atts = el.getAttributes();
+            for (int x = 0; x < atts.getLength(); x++) {
+                Attr attr = (Attr)atts.item(x);
+                if (ToolConstants.NS_JAXB_BINDINGS.equals(attr.getNamespaceURI())) {
+                    schemaNode.setAttributeNS(attr.getNamespaceURI(),
+                                              attr.getName(),
+                                              attr.getValue());
+                    if ("extensionBindingPrefixes".equals(attr.getLocalName())) {
+                        String pfxs = attr.getValue();
+                        while (pfxs.length() > 0) {
+                            String pfx = pfxs;
+                            int idx = pfx.indexOf(',');
+                            if (idx != -1) {
+                                pfxs = pfxs.substring(idx + 1);
+                                pfx = pfx.substring(0, idx);
+                            } else {
+                                pfxs = "";
+                            }
+                            String ns = el.lookupNamespaceURI(pfx);
+                            schemaNode.setAttribute("xmlns:" + pfx,
+                                                    ns);
+                        }
+                    }
+                }
+            }
+        }
+        
+    }
+
     protected void internalizeBinding(Element bindings, Element targetNode, String expression) {
         if (bindings.getAttributeNode("wsdlLocation") != null) {
             expression = "/";

Modified: cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ProcessorUtil.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ProcessorUtil.java?rev=678891&r1=678890&r2=678891&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ProcessorUtil.java (original)
+++ cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ProcessorUtil.java Tue Jul 22 13:42:43 2008
@@ -31,6 +31,7 @@
 
 import javax.xml.namespace.QName;
 
+import org.w3c.dom.Attr;
 import org.w3c.dom.DOMException;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -334,11 +335,13 @@
             clone = document.createEntityReference(node.getNodeName());
             break;
         case Node.ELEMENT_NODE:
-            clone = document.createElement(node.getNodeName());
+            clone = document.createElementNS(node.getNamespaceURI(), node.getNodeName());
             NamedNodeMap attributes = node.getAttributes();
             for (int i = 0; i < attributes.getLength(); i++) {
-                ((Element)clone).setAttribute(attributes.item(i).getNodeName(), attributes.item(i)
-                    .getNodeValue());
+                Attr attr = (Attr)attributes.item(i);
+                ((Element)clone).setAttributeNS(attr.getNamespaceURI(),
+                                                attr.getNodeName(),
+                                                attr.getNodeValue());
             }
             break;
        

Modified: cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java?rev=678891&r1=678890&r2=678891&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java (original)
+++ cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java Tue Jul 22 13:42:43 2008
@@ -1002,4 +1002,21 @@
         assertEquals("int", webFault.name());
     }
     
+    @Test
+    public void testCXF1620() throws Exception {
+        env.put(ToolConstants.CFG_WSDLURL, 
+                getLocation("/wsdl2java_wsdl/jaxb_custom_extensors.wsdl"));   
+        env.put(ToolConstants.CFG_BINDING,
+                getLocation("/wsdl2java_wsdl/jaxb_custom_extensors.xjb"));
+
+        processor.setContext(env);
+        processor.execute();
+        Class<?> clz = classLoader.loadClass("org.apache.cxf.w2j.jaxb_custom_ext.types.Foo");
+        
+        assertEquals(3, clz.getDeclaredFields().length);
+        
+        clz = classLoader.loadClass("org.apache.cxf.w2j.jaxb_custom_ext.types.Foo2");
+        assertEquals(1, clz.getDeclaredFields().length);
+    }
+    
 }

Added: cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/jaxb_custom_extensors.wsdl
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/jaxb_custom_extensors.wsdl?rev=678891&view=auto
==============================================================================
--- cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/jaxb_custom_extensors.wsdl (added)
+++ cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/jaxb_custom_extensors.wsdl Tue Jul 22 13:42:43 2008
@@ -0,0 +1,197 @@
+<?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 name="HelloWorld" targetNamespace="http://cxf.apache.org/w2j/jaxb_custom_ext" 
+    xmlns="http://schemas.xmlsoap.org/wsdl/" 
+    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
+    xmlns:tns="http://cxf.apache.org/w2j/jaxb_custom_ext"
+    xmlns:x1="http://cxf.apache.org/w2j/jaxb_custom_ext/types"
+    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
+    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+    <wsdl:types>
+        <schema targetNamespace="http://cxf.apache.org/w2j/jaxb_custom_ext/types" 
+            xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+
+            
+            <complexType name="foo">
+				<choice>
+					<sequence>
+						<element name="a" type="xsd:int" />
+						<element name="b" type="xsd:int" />
+					</sequence>
+					<sequence>
+						<element name="b" type="xsd:int" />
+						<element name="c" type="xsd:int" />
+					</sequence>
+				</choice>
+			</complexType>
+			 
+			<complexType name="foo2">
+                <sequence>
+                    <element name="property" type="xsd:string"/>
+                    <choice maxOccurs="unbounded">
+                        <element name="property" type="xsd:string"/>
+                        <element name="compound" type="xsd:int"/>
+                    </choice>
+                </sequence>
+            </complexType>
+            
+            <element name="sayHi">
+                <complexType/>
+            </element>
+            <element name="sayHiResponse">
+                <complexType>
+                    <sequence>
+                        <element name="responseType" type="xsd:string"/>
+                    </sequence>
+                </complexType>
+            </element>
+            <element name="greetMe">
+                <complexType>
+                    <sequence>
+                        <element name="requestType" type="xsd:string"/>
+                    </sequence>
+                </complexType>
+            </element>
+            <element name="greetMeResponse">
+                <complexType>
+                    <sequence>
+                        <element name="responseType" type="xsd:string"/>
+                    </sequence>
+                </complexType>
+            </element>
+            <element name="greetMeOneWay">
+                <complexType>
+                    <sequence>
+                        <element name="requestType" type="xsd:string"/>
+                    </sequence>
+                </complexType>
+            </element>
+	        <element name="pingMe">
+				<complexType/>
+			</element>
+			<element name="pingMeResponse">
+				<complexType/>
+			</element>
+			<element name="faultDetail">
+				<complexType>
+					<sequence>
+						<element name="minor" type="xsd:short"/>
+						<element name="major" type="xsd:short"/>
+					</sequence>
+				</complexType>
+			</element>
+        </schema>
+    </wsdl:types>
+    <wsdl:message name="sayHiRequest">
+        <wsdl:part element="x1:sayHi" name="in"/>
+    </wsdl:message>
+    <wsdl:message name="sayHiResponse">
+        <wsdl:part element="x1:sayHiResponse" name="out"/>
+    </wsdl:message>
+    <wsdl:message name="greetMeRequest">
+        <wsdl:part element="x1:greetMe" name="in"/>
+    </wsdl:message>
+    <wsdl:message name="greetMeResponse">
+        <wsdl:part element="x1:greetMeResponse" name="out"/>
+    </wsdl:message>
+    <wsdl:message name="greetMeOneWayRequest">
+        <wsdl:part element="x1:greetMeOneWay" name="in"/>
+    </wsdl:message>
+    <wsdl:message name="pingMeRequest">
+		<wsdl:part name="in" element="x1:pingMe"/>
+	</wsdl:message>
+	<wsdl:message name="pingMeResponse">
+		<wsdl:part name="out" element="x1:pingMeResponse"/>
+	</wsdl:message>		
+	<wsdl:message name="pingMeFault">
+		<wsdl:part name="faultDetail" element="x1:faultDetail"/>
+	</wsdl:message>
+    
+    <wsdl:portType name="Greeter">
+        <wsdl:operation name="sayHi">
+            <wsdl:input message="tns:sayHiRequest" name="sayHiRequest"/>
+            <wsdl:output message="tns:sayHiResponse" name="sayHiResponse"/>
+        </wsdl:operation>
+        
+        <wsdl:operation name="greetMe">
+            <wsdl:input message="tns:greetMeRequest" name="greetMeRequest"/>
+            <wsdl:output message="tns:greetMeResponse" name="greetMeResponse"/>
+        </wsdl:operation>
+        
+        <wsdl:operation name="greetMeOneWay">
+            <wsdl:input message="tns:greetMeOneWayRequest" name="greetMeOneWayRequest"/>
+        </wsdl:operation>
+
+	    <wsdl:operation name="pingMe">
+	        <wsdl:input name="pingMeRequest" message="tns:pingMeRequest"/>
+			<wsdl:output name="pingMeResponse" message="tns:pingMeResponse"/>
+			<wsdl:fault name="pingMeFault" message="tns:pingMeFault"/>
+	    </wsdl:operation> 
+    </wsdl:portType>
+    <wsdl:binding name="Greeter_SOAPBinding" type="tns:Greeter">
+        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+        
+        <wsdl:operation name="sayHi">
+            <soap:operation soapAction="" style="document"/>
+            <wsdl:input name="sayHiRequest">
+                <soap:body use="literal"/>
+            </wsdl:input>
+            <wsdl:output name="sayHiResponse">
+                <soap:body use="literal"/>
+            </wsdl:output>
+        </wsdl:operation>
+        
+        <wsdl:operation name="greetMe">
+            <soap:operation soapAction="" style="document"/>
+            <wsdl:input name="greetMeRequest">
+                <soap:body use="literal"/>
+            </wsdl:input>
+            <wsdl:output name="greetMeResponse">
+                <soap:body use="literal"/>
+            </wsdl:output>
+        </wsdl:operation>
+        
+        <wsdl:operation name="greetMeOneWay">
+            <soap:operation soapAction="" style="document"/>
+            <wsdl:input name="greetMeOneWayRequest">
+                <soap:body use="literal"/>
+            </wsdl:input>
+        </wsdl:operation>
+
+			<wsdl:operation name="pingMe">
+			<soap:operation style="document"/>
+			<wsdl:input>
+				<soap:body use="literal"/>
+			</wsdl:input>
+			<wsdl:output>
+				<soap:body use="literal"/>
+			</wsdl:output>
+			<wsdl:fault name="pingMeFault">
+				<soap:fault name="pingMeFault" use="literal"/>
+			</wsdl:fault>
+		</wsdl:operation>
+        
+    </wsdl:binding>
+    <wsdl:service name="SOAPService">
+        <wsdl:port binding="tns:Greeter_SOAPBinding" name="SoapPort">
+            <soap:address location="http://localhost:9000/SoapContext/SoapPort"/>
+        </wsdl:port>
+    </wsdl:service>
+</wsdl:definitions>
\ No newline at end of file

Propchange: cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/jaxb_custom_extensors.wsdl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/jaxb_custom_extensors.wsdl
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/jaxb_custom_extensors.wsdl
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/jaxb_custom_extensors.xjb
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/jaxb_custom_extensors.xjb?rev=678891&view=auto
==============================================================================
--- cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/jaxb_custom_extensors.xjb (added)
+++ cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/jaxb_custom_extensors.xjb Tue Jul 22 13:42:43 2008
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+  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.
+-->
+<jaxws:bindings wsdlLocation="jaxb_custom_extensors.wsdl"
+    xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" 
+    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+    <jaxws:bindings node="wsdl:definitions/wsdl:types/xsd:schema">
+            
+        <jaxb:globalBindings 
+           	jaxb:version="2.0"
+            xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
+           	xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
+           	jaxb:extensionBindingPrefixes="xjc">
+            <xjc:simple />
+        </jaxb:globalBindings>
+    </jaxws:bindings>
+</jaxws:bindings>

Propchange: cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/jaxb_custom_extensors.xjb
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/jaxb_custom_extensors.xjb
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/jaxb_custom_extensors.xjb
------------------------------------------------------------------------------
    svn:mime-type = text/xml