You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ay...@apache.org on 2013/09/12 23:48:39 UTC

svn commit: r1522738 - in /cxf/trunk: rt/wsdl/src/main/java/org/apache/cxf/wsdl11/ tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/annotator/ tools/wsdlto/test/src/test/java/org/apache/cxf/tools/w...

Author: ay
Date: Thu Sep 12 21:48:38 2013
New Revision: 1522738

URL: http://svn.apache.org/r1522738
Log:
[CXF-5280] wsdl2java may fail to extract the wsma:Action attribute value

Added:
    cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf5280/
    cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf5280/hello_world.wsdl
Modified:
    cxf/trunk/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
    cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/annotator/WSActionAnnotator.java
    cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenBugTest.java

Modified: cxf/trunk/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java?rev=1522738&r1=1522737&r2=1522738&view=diff
==============================================================================
--- cxf/trunk/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java (original)
+++ cxf/trunk/rt/wsdl/src/main/java/org/apache/cxf/wsdl11/WSDLManagerImpl.java Thu Sep 12 21:48:38 2013
@@ -30,6 +30,7 @@ import javax.wsdl.BindingInput;
 import javax.wsdl.Definition;
 import javax.wsdl.Types;
 import javax.wsdl.WSDLException;
+import javax.wsdl.extensions.AttributeExtensible;
 import javax.wsdl.extensions.ExtensibilityElement;
 import javax.wsdl.extensions.ExtensionRegistry;
 import javax.wsdl.extensions.mime.MIMEPart;
@@ -97,6 +98,8 @@ public class WSDLManagerImpl implements 
             Class<? extends ExtensibilityElement> clazz = 
                 registry.createExtension(BindingInput.class, header).getClass();
             registry.mapExtensionTypes(MIMEPart.class, header, clazz);
+            // register some known extension attribute types that are not recognized by the default registry
+            addExtensionAttributeTypes(registry);
         } catch (WSDLException e) {
             throw new BusException(e);
         }
@@ -252,6 +255,22 @@ public class WSDLManagerImpl implements 
         return def;
     }
 
+    private void addExtensionAttributeTypes(ExtensionRegistry extreg) {
+        // register types that are not of wsdl4j's default attribute type QName
+        QName qn = new QName("http://www.w3.org/2006/05/addressing/wsdl", "Action");
+        extreg.registerExtensionAttributeType(javax.wsdl.Input.class, qn, AttributeExtensible.STRING_TYPE);
+        extreg.registerExtensionAttributeType(javax.wsdl.Output.class, qn, AttributeExtensible.STRING_TYPE);
+        extreg.registerExtensionAttributeType(javax.wsdl.Fault.class, qn, AttributeExtensible.STRING_TYPE);
+        qn = new QName("http://www.w3.org/2007/05/addressing/metadata", "Action"); 
+        extreg.registerExtensionAttributeType(javax.wsdl.Input.class, qn, AttributeExtensible.STRING_TYPE);
+        extreg.registerExtensionAttributeType(javax.wsdl.Output.class, qn, AttributeExtensible.STRING_TYPE);
+        extreg.registerExtensionAttributeType(javax.wsdl.Fault.class, qn, AttributeExtensible.STRING_TYPE);
+        qn = new QName("http://www.w3.org/2005/02/addressing/wsdl", "Action");
+        extreg.registerExtensionAttributeType(javax.wsdl.Input.class, qn, AttributeExtensible.STRING_TYPE);
+        extreg.registerExtensionAttributeType(javax.wsdl.Output.class, qn, AttributeExtensible.STRING_TYPE);
+        extreg.registerExtensionAttributeType(javax.wsdl.Fault.class, qn, AttributeExtensible.STRING_TYPE);
+    }
+
     public ServiceSchemaInfo getSchemasForDefinition(Definition wsdl) {
         if (disableSchemaCache) {
             return null;

Modified: cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/annotator/WSActionAnnotator.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/annotator/WSActionAnnotator.java?rev=1522738&r1=1522737&r2=1522738&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/annotator/WSActionAnnotator.java (original)
+++ cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/annotator/WSActionAnnotator.java Thu Sep 12 21:48:38 2013
@@ -53,20 +53,14 @@ public final class WSActionAnnotator imp
     }
     
     private String getAction(AbstractMessageContainer mi) {
-        QName action = (QName)mi.getExtensionAttribute(WSAW_ACTION_QNAME);
+        String action = (String)mi.getExtensionAttribute(WSAW_ACTION_QNAME);
         if (action == null) {
-            action = (QName)mi.getExtensionAttribute(WSAM_ACTION_QNAME);
+            action = (String)mi.getExtensionAttribute(WSAM_ACTION_QNAME);
         }
         if (action == null) {
-            action = (QName)mi.getExtensionAttribute(WSAW_OLD_ACTION_QNAME);
+            action = (String)mi.getExtensionAttribute(WSAW_OLD_ACTION_QNAME);
         }
-        if (action != null) {
-            String s = action.getLocalPart();
-            if (!StringUtils.isEmpty(s)) {
-                return s;
-            }
-        } 
-        return null;
+        return StringUtils.isEmpty(action) ? null : action;
     }
     
     public void annotate(JavaAnnotatable ja) {

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=1522738&r1=1522737&r2=1522738&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 Thu Sep 12 21:48:38 2013
@@ -32,6 +32,7 @@ import javax.jws.WebParam;
 import javax.jws.WebResult;
 import javax.jws.WebService;
 import javax.xml.namespace.QName;
+import javax.xml.ws.Action;
 import javax.xml.ws.WebFault;
 import javax.xml.ws.WebServiceClient;
 
@@ -45,7 +46,6 @@ import org.apache.cxf.tools.wsdlto.Abstr
 import org.apache.cxf.tools.wsdlto.WSDLToJava;
 import org.apache.cxf.tools.wsdlto.frontend.jaxws.validator.UniqueBodyValidator;
 import org.apache.cxf.wsdl11.WSDLRuntimeException;
-
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.handler.ResourceHandler;
 
@@ -1194,4 +1194,23 @@ public class CodeGenBugTest extends Abst
             fail("shouldn't get exception");
         }
     }
+
+    @Test
+    public void testCXF5280() throws Exception {
+        env.put(ToolConstants.CFG_ALL, "all");
+        env.put(ToolConstants.CFG_COMPILE, "compile");
+        env.put(ToolConstants.CFG_OUTPUTDIR, output.getCanonicalPath());
+        env.put(ToolConstants.CFG_CLASSDIR, output.getCanonicalPath() + "/classes");
+        env.put(ToolConstants.CFG_WSDLURL, getLocation("/wsdl2java_wsdl/cxf5280/hello_world.wsdl"));
+        processor.setContext(env);
+        processor.execute();
+
+        Class<?> pcls = classLoader.loadClass("org.apache.cxf.w2j.hello_world_soap_http.Greeter");
+        Class<?> acls = classLoader.loadClass("org.apache.cxf.w2j.hello_world_soap_http.types.GreetMe");
+        Method m = pcls.getMethod("greetMe", new Class[] {acls});
+
+        Action actionAnn = AnnotationUtil.getPrivMethodAnnotation(m, Action.class);
+        assertNotNull(actionAnn);
+        assertEquals("http://cxf.apache.org/w2j/hello_world_soap_http/greetMe", actionAnn.input());
+    }
 }

Added: cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf5280/hello_world.wsdl
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf5280/hello_world.wsdl?rev=1522738&view=auto
==============================================================================
--- cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf5280/hello_world.wsdl (added)
+++ cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf5280/hello_world.wsdl Thu Sep 12 21:48:38 2013
@@ -0,0 +1,81 @@
+<?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="http://schemas.xmlsoap.org/wsdl/"
+    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+    xmlns:tns="http://cxf.apache.org/w2j/hello_world_soap_http"
+    xmlns:x1="http://cxf.apache.org/w2j/hello_world_soap_http/types"
+    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+    xmlns:wswa="http://www.w3.org/2006/05/addressing/wsdl"
+    xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
+    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+    targetNamespace="http://cxf.apache.org/w2j/hello_world_soap_http" name="HelloWorld">
+    <wsdl:types>
+        <schema targetNamespace="http://cxf.apache.org/w2j/hello_world_soap_http/types" xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+            <element name="greetMe">
+                <complexType>
+                    <sequence>
+                        <element name="requestType" type="string"/>
+                        <element name="requestTypeb" type="string"/>
+                        <element name="requestTypec" type="string"/>
+                    </sequence>
+                </complexType>
+            </element>
+            <element name="greetMeResponse">
+                <complexType>
+                    <sequence>
+                        <any/>
+                    </sequence>
+                </complexType>
+            </element>
+        </schema>
+    </wsdl:types>
+    <wsdl:message name="greetMeRequest">
+        <wsdl:part name="parameters" element="x1:greetMe"/>
+    </wsdl:message>
+    <wsdl:message name="greetMeResponse">
+        <wsdl:part name="parameters" element="x1:greetMeResponse"/>
+    </wsdl:message>
+    
+    <wsdl:portType name="Greeter">
+        <wsdl:operation name="greetMe" parameterOrder="parameters">
+            <wsdl:input name="greetMeRequest" message="tns:greetMeRequest" 
+                        wswa:Action="http://cxf.apache.org/w2j/hello_world_soap_http/greetMe"/>
+            <wsdl:output name="greetMeResponse" message="tns:greetMeResponse"/>
+        </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="greetMe">
+            <soap:operation style="document"/>
+            <wsdl:input>
+                <soap:body use="literal"/>
+            </wsdl:input>
+            <wsdl:output>
+                <soap:body use="literal"/>
+            </wsdl:output>
+        </wsdl:operation>
+    </wsdl:binding>
+    <wsdl:service name="SOAPService">
+        <wsdl:port name="SoapPort" binding="tns:Greeter_SOAPBinding">
+            <soap:address location="http://localhost:9000/SoapContext/SoapPort"/>
+            <wswa:UsingAddressing/>
+        </wsdl:port>
+    </wsdl:service>
+</wsdl:definitions>