Return-Path: X-Original-To: apmail-cxf-commits-archive@www.apache.org Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 9EA6D4A1D for ; Thu, 19 May 2011 09:46:31 +0000 (UTC) Received: (qmail 20059 invoked by uid 500); 19 May 2011 09:46:31 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 19944 invoked by uid 500); 19 May 2011 09:46:30 -0000 Mailing-List: contact commits-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list commits@cxf.apache.org Received: (qmail 19937 invoked by uid 99); 19 May 2011 09:46:30 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 19 May 2011 09:46:30 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 19 May 2011 09:46:28 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 9313323889E1; Thu, 19 May 2011 09:46:08 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1124645 - in /cxf/trunk: rt/core/src/main/java/org/apache/cxf/wsdl11/ rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/wsdl11/ tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/int... Date: Thu, 19 May 2011 09:46:08 -0000 To: commits@cxf.apache.org From: ema@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110519094608.9313323889E1@eris.apache.org> Author: ema Date: Thu May 19 09:46:07 2011 New Revision: 1124645 URL: http://svn.apache.org/viewvc?rev=1124645&view=rev Log: [CXF-2193]:Allow for WRAPPED style code generation for warpper elements with xsd:extension of a wrapper-compatible type Added: cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf2193/ cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf2193/hello_world_extension_wrapped.wsdl Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/wsdl11/Wsdl11AttachmentPolicyProvider.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/CodeGenTest.java Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java?rev=1124645&r1=1124644&r2=1124645&view=diff ============================================================================== --- cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java (original) +++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java Thu May 19 09:46:07 2011 @@ -83,6 +83,7 @@ import org.apache.ws.commons.schema.XmlS import org.apache.ws.commons.schema.XmlSchemaElement; import org.apache.ws.commons.schema.XmlSchemaSequence; import org.apache.ws.commons.schema.XmlSchemaSequenceMember; +import org.apache.ws.commons.schema.XmlSchemaType; import static org.apache.cxf.helpers.CastUtils.cast; @@ -742,55 +743,76 @@ public class WSDLServiceBuilder { MessageInfo wrapper, boolean allowRefs) { if (type.getParticle() instanceof XmlSchemaSequence) { XmlSchemaSequence seq = (XmlSchemaSequence)type.getParticle(); - List items = seq.getItems(); - boolean ret = true; - for (XmlSchemaSequenceMember seqItem : items) { - if (!(seqItem instanceof XmlSchemaElement)) { - return false; - } - XmlSchemaElement el = (XmlSchemaElement)seqItem; - - if (el.getSchemaTypeName() != null) { - MessagePartInfo mpi = wrapper.addMessagePart(new QName(namespaceURI, el.getName())); - mpi.setTypeQName(el.getSchemaTypeName()); - mpi.setElement(true); - mpi.setElementQName(el.getWireName()); - mpi.setConcreteName(el.getWireName()); - mpi.setXmlSchema(el); - } else if (el.getRef().getTargetQName() != null) { - MessagePartInfo mpi = wrapper.addMessagePart(el.getRef().getTargetQName()); - mpi.setTypeQName(el.getRef().getTargetQName()); - mpi.setElementQName(el.getRef().getTargetQName()); - mpi.setElement(true); - mpi.setXmlSchema(el); - mpi.setProperty("isRefElement", true); - // element reference is not permitted for wrapper element - if (!allowRefs) { - ret = false; - } - } else { - // anonymous type - MessagePartInfo mpi = wrapper.addMessagePart(new QName(namespaceURI, el.getName())); - mpi.setElementQName(mpi.getName()); - mpi.setConcreteName(el.getWireName()); - mpi.setElement(true); - mpi.setXmlSchema(el); - } - } - - return ret; + return buildMessageParts(seq, namespaceURI, wrapper, allowRefs); } else if (type.getParticle() == null) { if (type.getContentModel() == null) { return true; } if (type.getContentModel().getContent() instanceof XmlSchemaComplexContentExtension) { - return false; + XmlSchemaComplexContentExtension extension = (XmlSchemaComplexContentExtension)type + .getContentModel().getContent(); + QName baseTypeName = extension.getBaseTypeName(); + ServiceInfo serviceInfo = wrapper.getOperation().getInterface().getService(); + XmlSchemaType schemaType = serviceInfo.getXmlSchemaCollection().getTypeByQName(baseTypeName); + if (!(schemaType instanceof XmlSchemaComplexType) + || !isWrappableSequence((XmlSchemaComplexType)schemaType, namespaceURI, wrapper, + allowRefs)) { + return false; + } + + if (extension.getParticle() instanceof XmlSchemaSequence) { + XmlSchemaSequence seq = (XmlSchemaSequence)extension.getParticle(); + return buildMessageParts(seq, namespaceURI, wrapper, allowRefs); + } + } return true; } return false; } + + private static boolean buildMessageParts(XmlSchemaSequence seq, String namespaceURI, MessageInfo wrapper, + boolean allowRefs) { + List items = seq.getItems(); + boolean ret = true; + for (XmlSchemaSequenceMember seqItem : items) { + if (!(seqItem instanceof XmlSchemaElement)) { + return false; + } + XmlSchemaElement el = (XmlSchemaElement)seqItem; + + if (el.getSchemaTypeName() != null) { + MessagePartInfo mpi = wrapper.addMessagePart(new QName(namespaceURI, el.getName())); + mpi.setTypeQName(el.getSchemaTypeName()); + mpi.setElement(true); + mpi.setElementQName(el.getWireName()); + mpi.setConcreteName(el.getWireName()); + mpi.setXmlSchema(el); + } else if (el.getRef().getTargetQName() != null) { + MessagePartInfo mpi = wrapper.addMessagePart(el.getRef().getTargetQName()); + mpi.setTypeQName(el.getRef().getTargetQName()); + mpi.setElementQName(el.getRef().getTargetQName()); + mpi.setElement(true); + mpi.setXmlSchema(el); + mpi.setProperty("isRefElement", true); + // element reference is not permitted for wrapper element + if (!allowRefs) { + ret = false; + } + } else { + // anonymous type + MessagePartInfo mpi = wrapper.addMessagePart(new QName(namespaceURI, el.getName())); + mpi.setElementQName(mpi.getName()); + mpi.setConcreteName(el.getWireName()); + mpi.setElement(true); + mpi.setXmlSchema(el); + } + } + return ret; + } + + private void buildMessage(AbstractMessageContainer minfo, Message msg) { SchemaCollection schemas = minfo.getOperation().getInterface().getService() .getXmlSchemaCollection(); Modified: cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/wsdl11/Wsdl11AttachmentPolicyProvider.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/wsdl11/Wsdl11AttachmentPolicyProvider.java?rev=1124645&r1=1124644&r2=1124645&view=diff ============================================================================== --- cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/wsdl11/Wsdl11AttachmentPolicyProvider.java (original) +++ cxf/trunk/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/wsdl11/Wsdl11AttachmentPolicyProvider.java Thu May 19 09:46:07 2011 @@ -176,7 +176,7 @@ public class Wsdl11AttachmentPolicyProvi for (UnknownExtensibilityElement e : extensions) { Policy p = null; if (Constants.isPolicyElement(e.getElementType())) { - p = builder.getPolicy(e.getElement()); + p = builder.getPolicy(e.getElement()); } else if (Constants.isPolicyRef(e.getElementType())) { PolicyReference ref = builder.getPolicyReference(e.getElement()); 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=1124645&r1=1124644&r2=1124645&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 Thu May 19 09:46:07 2011 @@ -47,11 +47,14 @@ import org.apache.cxf.tools.util.NameUti import org.apache.cxf.tools.util.URIParserUtil; import org.apache.cxf.tools.wsdlto.core.DataBindingProfile; import org.apache.ws.commons.schema.XmlSchema; +import org.apache.ws.commons.schema.XmlSchemaComplexContentExtension; import org.apache.ws.commons.schema.XmlSchemaComplexType; +import org.apache.ws.commons.schema.XmlSchemaContent; import org.apache.ws.commons.schema.XmlSchemaElement; import org.apache.ws.commons.schema.XmlSchemaForm; import org.apache.ws.commons.schema.XmlSchemaSequence; import org.apache.ws.commons.schema.XmlSchemaSequenceMember; +import org.apache.ws.commons.schema.XmlSchemaType; public final class ProcessorUtil { private static final String KEYWORDS_PREFIX = "_"; @@ -378,9 +381,41 @@ public final class ProcessorUtil { XmlSchemaElement elementByName = schema.getElementByQName(partElement); XmlSchemaComplexType type = (XmlSchemaComplexType)elementByName.getSchemaType(); - + XmlSchemaSequence seq = (XmlSchemaSequence)type.getParticle(); + qnames.addAll(createWrappedElements(seq)); + + //If it's extension + if (seq == null && type.getContentModel() != null) { + + XmlSchemaContent xmlSchemaConent = type.getContentModel().getContent(); + if (xmlSchemaConent instanceof XmlSchemaComplexContentExtension) { + XmlSchemaComplexContentExtension extension = (XmlSchemaComplexContentExtension)type + .getContentModel().getContent(); + QName baseTypeName = extension.getBaseTypeName(); + XmlSchemaType schemaType = schema.getTypeByQName(baseTypeName); + if (schemaType instanceof XmlSchemaComplexType) { + XmlSchemaComplexType complexType = (XmlSchemaComplexType)schemaType; + if (complexType.getParticle() instanceof XmlSchemaSequence) { + seq = (XmlSchemaSequence)complexType.getParticle(); + qnames.addAll(createWrappedElements(seq)); + } + } + + if (extension.getParticle() instanceof XmlSchemaSequence) { + XmlSchemaSequence xmlSchemaSeq = (XmlSchemaSequence)extension.getParticle(); + qnames.addAll(createWrappedElements(xmlSchemaSeq)); + } + } + + } + return qnames; + } + + private static List createWrappedElements(XmlSchemaSequence seq) { + + List qnames = new ArrayList(); if (seq != null) { List items = seq.getItems(); @@ -398,7 +433,7 @@ public final class ProcessorUtil { } return qnames; } - + public static boolean isSchemaFormQualified(ToolContext context, QName partElement) { ServiceInfo serviceInfo = (ServiceInfo)context.get(ServiceInfo.class); SchemaCollection schemaCol = serviceInfo.getXmlSchemaCollection(); Modified: cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java?rev=1124645&r1=1124644&r2=1124645&view=diff ============================================================================== --- cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java (original) +++ cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java Thu May 19 09:46:07 2011 @@ -1366,5 +1366,26 @@ public class CodeGenTest extends Abstrac fault = classLoader.loadClass("org.apache.cxf.w2j.hello_world_soap_http.BadRecordLitFault"); assertEquals(fault.getName().hashCode(), ObjectStreamClass.lookup(fault).getSerialVersionUID()); } + + + @Test + public void testExtensionWrapper() throws Exception { + env.put(ToolConstants.CFG_WSDLURL, + getLocation("/wsdl2java_wsdl/cxf2193/hello_world_extension_wrapped.wsdl")); + processor.setContext(env); + processor.execute(); + + File infFile = new File(output, "org/apache/cxf/w2j/extension_wrapped/Greeter.java"); + assertTrue(infFile.exists()); + + Class interfaceClass = classLoader.loadClass("org.apache.cxf.w2j.extension_wrapped.Greeter"); + + Method method = interfaceClass.getMethod("greetMe", new Class[] { + Holder.class, Holder.class, Holder.class, Holder.class, Holder.class + }); + assertTrue("greetMe operation is NOT generated correctly as excepted", method != null); + RequestWrapper reqWrapper = method.getAnnotation(RequestWrapper.class); + assertNotNull("@RequestWrapper is expected", reqWrapper); + } } Added: cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf2193/hello_world_extension_wrapped.wsdl URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf2193/hello_world_extension_wrapped.wsdl?rev=1124645&view=auto ============================================================================== --- cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf2193/hello_world_extension_wrapped.wsdl (added) +++ cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/cxf2193/hello_world_extension_wrapped.wsdl Thu May 19 09:46:07 2011 @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > + + + + + + + + + + + + + + + + + + + + + + + + +