Return-Path: Delivered-To: apmail-incubator-cxf-commits-archive@locus.apache.org Received: (qmail 34625 invoked from network); 3 Apr 2007 02:14:05 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 3 Apr 2007 02:14:05 -0000 Received: (qmail 66122 invoked by uid 500); 3 Apr 2007 02:14:12 -0000 Delivered-To: apmail-incubator-cxf-commits-archive@incubator.apache.org Received: (qmail 66052 invoked by uid 500); 3 Apr 2007 02:14:12 -0000 Mailing-List: contact cxf-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: cxf-dev@incubator.apache.org Delivered-To: mailing list cxf-commits@incubator.apache.org Received: (qmail 66041 invoked by uid 99); 3 Apr 2007 02:14:11 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 02 Apr 2007 19:14:11 -0700 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 02 Apr 2007 19:14:03 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id DF2C01A9838; Mon, 2 Apr 2007 19:13:42 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r524998 - in /incubator/cxf/trunk: testutils/src/main/resources/wsdl/ tools/common/src/main/java/org/apache/cxf/tools/common/ tools/common/src/main/java/org/apache/cxf/tools/common/model/ tools/wsdlto/core/src/main/java/org/apache/cxf/tools... Date: Tue, 03 Apr 2007 02:13:42 -0000 To: cxf-commits@incubator.apache.org From: dkulp@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070403021342.DF2C01A9838@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: dkulp Date: Mon Apr 2 19:13:40 2007 New Revision: 524998 URL: http://svn.apache.org/viewvc?view=rev&rev=524998 Log: JAX-WS WSDl -> Java customization updates * Support classname on more elements * Support packagename on more elements * Support ports with different portTypes in same service * Fix issues if schema has elements and types with same name, it always uses he element mapping. * Support for jaxws custom method names * Properly map/mangle Type names if conflict with SEI Added: incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ClassNameProcessor.java (with props) Modified: incubator/cxf/trunk/testutils/src/main/resources/wsdl/swa-mime.wsdl incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/model/JavaModel.java incubator/cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java incubator/cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/core/DataBindingProfile.java incubator/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/ClassNameAllocatorImpl.java incubator/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customiztion/JAXWSBindingDeserializer.java incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customiztion/JAXWSBindingParser.java incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/HandlerConfigGenerator.java incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/SEIGenerator.java incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/ServiceGenerator.java incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/WSDLToJavaProcessor.java incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/FaultProcessor.java incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/PortTypeProcessor.java incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ProcessorUtil.java incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ServiceProcessor.java incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/mapper/MethodMapper.java incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/wsdl11/JAXWSDefinitionBuilder.java incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/test/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/DummyDataBinding.java incubator/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/swa-mime.wsdl Modified: incubator/cxf/trunk/testutils/src/main/resources/wsdl/swa-mime.wsdl URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/testutils/src/main/resources/wsdl/swa-mime.wsdl?view=diff&rev=524998&r1=524997&r2=524998 ============================================================================== --- incubator/cxf/trunk/testutils/src/main/resources/wsdl/swa-mime.wsdl (original) +++ incubator/cxf/trunk/testutils/src/main/resources/wsdl/swa-mime.wsdl Mon Apr 2 19:13:40 2007 @@ -55,8 +55,8 @@ - - + + @@ -75,20 +75,20 @@ - + - + - + - + Added: incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ClassNameProcessor.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ClassNameProcessor.java?view=auto&rev=524998 ============================================================================== --- incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ClassNameProcessor.java (added) +++ incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ClassNameProcessor.java Mon Apr 2 19:13:40 2007 @@ -0,0 +1,25 @@ +/** + * 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. + */ + +package org.apache.cxf.tools.common; + +public interface ClassNameProcessor extends Processor { + + void processClassNames(); +} Propchange: incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ClassNameProcessor.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/ClassNameProcessor.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Modified: incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/model/JavaModel.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/model/JavaModel.java?view=diff&rev=524998&r1=524997&r2=524998 ============================================================================== --- incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/model/JavaModel.java (original) +++ incubator/cxf/trunk/tools/common/src/main/java/org/apache/cxf/tools/common/model/JavaModel.java Mon Apr 2 19:13:40 2007 @@ -30,9 +30,9 @@ private String location; public JavaModel() { - interfaces = new HashMap(); - exceptionClasses = new HashMap(); - serviceClasses = new HashMap(); + interfaces = new LinkedHashMap(); + exceptionClasses = new LinkedHashMap(); + serviceClasses = new LinkedHashMap(); } public void addInterface(String name, JavaInterface i) { Modified: incubator/cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java?view=diff&rev=524998&r1=524997&r2=524998 ============================================================================== --- incubator/cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java (original) +++ incubator/cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java Mon Apr 2 19:13:40 2007 @@ -43,6 +43,7 @@ import org.apache.cxf.service.model.InterfaceInfo; import org.apache.cxf.service.model.ServiceInfo; import org.apache.cxf.tools.common.AbstractCXFToolContainer; +import org.apache.cxf.tools.common.ClassNameProcessor; import org.apache.cxf.tools.common.ClassUtils; import org.apache.cxf.tools.common.FrontEndGenerator; import org.apache.cxf.tools.common.Processor; @@ -65,6 +66,7 @@ public class WSDLToJavaContainer extends AbstractCXFToolContainer { + protected static final Logger LOG = LogUtils.getL7dLogger(WSDLToJavaContainer.class); private static final String DEFAULT_NS2PACKAGE = "http://www.w3.org/2005/08/addressing"; String toolName; @@ -144,22 +146,28 @@ } else { serviceList = serviceBuilder.buildMockServices(definition); } - context.put(ClassCollector.class, new ClassCollector()); } else { // TODO: wsdl2.0 support } Map interfaces = new HashMap(); - for (ServiceInfo service : serviceList) { - if (service.getInterface() != null - && !interfaces.containsKey(service.getInterface().getName().toString())) { - interfaces.put(service.getInterface().getName().toString(), service.getInterface()); - } - } + Map schemas = (Map)serviceList.get(0) .getProperty(WSDLServiceBuilder.WSDL_SCHEMA_ELEMENT_LIST); context.put(ToolConstants.SCHEMA_MAP, schemas); context.put(ToolConstants.PORTTYPE_MAP, interfaces); + Processor processor = frontend.getProcessor(); + if (processor instanceof ClassNameProcessor) { + processor.setEnvironment(context); + for (ServiceInfo service : serviceList) { + + context.put(ServiceInfo.class, service); + + ((ClassNameProcessor)processor).processClassNames(); + + context.put(ServiceInfo.class, null); + } + } generateTypes(); for (ServiceInfo service : serviceList) { @@ -170,7 +178,6 @@ } // Build the JavaModel from the ServiceModel - Processor processor = frontend.getProcessor(); processor.setEnvironment(context); processor.process(); Modified: incubator/cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/core/DataBindingProfile.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/core/DataBindingProfile.java?view=diff&rev=524998&r1=524997&r2=524998 ============================================================================== --- incubator/cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/core/DataBindingProfile.java (original) +++ incubator/cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/core/DataBindingProfile.java Mon Apr 2 19:13:40 2007 @@ -28,6 +28,6 @@ public interface DataBindingProfile { void generate(ToolContext context) throws ToolException; - String getType(QName qn); + String getType(QName qn, boolean element); String getWrappedElementType(QName wrapperElement, QName item); } Modified: incubator/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/ClassNameAllocatorImpl.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/ClassNameAllocatorImpl.java?view=diff&rev=524998&r1=524997&r2=524998 ============================================================================== --- incubator/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/ClassNameAllocatorImpl.java (original) +++ incubator/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/ClassNameAllocatorImpl.java Mon Apr 2 19:13:40 2007 @@ -19,14 +19,9 @@ package org.apache.cxf.tools.wsdlto.databinding.jaxb; -import javax.xml.namespace.QName; - import com.sun.tools.xjc.api.ClassNameAllocator; -import org.apache.cxf.service.model.InterfaceInfo; import org.apache.cxf.tools.util.ClassCollector; -import org.apache.cxf.tools.util.NameUtil; -import org.apache.cxf.tools.util.URIParserUtil; public class ClassNameAllocatorImpl implements ClassNameAllocator { private static final String TYPE_SUFFIX = "_Type"; @@ -49,20 +44,5 @@ collector.addTypesClassName(packageName, className, packageName + "." + fullClzName); return fullClzName; } - - public void setInterface(InterfaceInfo seiInfo, String packageName) { - QName portType = seiInfo.getName(); - String ns = portType.getNamespaceURI(); - String type = portType.getLocalPart(); - String pkgName = URIParserUtil.parsePackageName(ns, packageName); - String className = NameUtil.mangleNameToClassName(type); - String fullClassName = pkgName + "." + className; - if (packageName == null) { - packageName = pkgName; - } - collector.addSeiClassName(packageName, className, fullClassName); - - } - } Modified: incubator/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java?view=diff&rev=524998&r1=524997&r2=524998 ============================================================================== --- incubator/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java (original) +++ incubator/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java Mon Apr 2 19:13:40 2007 @@ -27,7 +27,6 @@ import java.util.Set; import java.util.logging.Logger; -import javax.wsdl.Definition; import javax.xml.namespace.QName; import org.w3c.dom.DOMException; @@ -52,7 +51,6 @@ import org.apache.cxf.common.util.StringUtils; import org.apache.cxf.helpers.DOMUtils; import org.apache.cxf.helpers.FileUtils; -import org.apache.cxf.service.model.InterfaceInfo; import org.apache.cxf.tools.common.ToolConstants; import org.apache.cxf.tools.common.ToolContext; import org.apache.cxf.tools.common.ToolException; @@ -65,23 +63,15 @@ private S2JJAXBModel rawJaxbModelGenCode; private ToolContext env; - private Definition def; @SuppressWarnings("unchecked") private void initialize(ToolContext penv) throws ToolException { env = penv; - def = (Definition)env.get(Definition.class); SchemaCompilerImpl schemaCompiler = (SchemaCompilerImpl)XJC.createSchemaCompiler(); ClassCollector classCollector = env.get(ClassCollector.class); ClassNameAllocatorImpl allocator = new ClassNameAllocatorImpl(classCollector); - Map interfaces = (Map)env - .get(ToolConstants.PORTTYPE_MAP); - for (String str : interfaces.keySet()) { - InterfaceInfo inf = interfaces.get(str); - allocator.setInterface(inf, env.mapPackageName(def.getTargetNamespace())); - } schemaCompiler.setClassNameAllocator(allocator); JAXBBindErrorListener listener = new JAXBBindErrorListener(env); @@ -194,17 +184,15 @@ } } - public String getType(QName qname) { - Mapping mapping = rawJaxbModelGenCode.get(qname); - - TypeAndAnnotation typeAnno = null; - - if (mapping != null) { - typeAnno = mapping.getType(); - } else { - typeAnno = rawJaxbModelGenCode.getJavaType(qname); + public String getType(QName qname, boolean element) { + TypeAndAnnotation typeAnno = rawJaxbModelGenCode.getJavaType(qname); + if (element) { + Mapping mapping = rawJaxbModelGenCode.get(qname); + if (mapping != null) { + typeAnno = mapping.getType(); + } } - + if (typeAnno != null && typeAnno.getTypeClass() != null) { return typeAnno.getTypeClass().fullName(); } Modified: incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customiztion/JAXWSBindingDeserializer.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customiztion/JAXWSBindingDeserializer.java?view=diff&rev=524998&r1=524997&r2=524998 ============================================================================== --- incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customiztion/JAXWSBindingDeserializer.java (original) +++ incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customiztion/JAXWSBindingDeserializer.java Mon Apr 2 19:13:40 2007 @@ -30,6 +30,10 @@ import org.w3c.dom.*; public class JAXWSBindingDeserializer implements ExtensionDeserializer, Serializable { + + public JAXWSBindingDeserializer() { + + } public ExtensibilityElement unmarshall(Class parentType, QName elementType, Modified: incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customiztion/JAXWSBindingParser.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customiztion/JAXWSBindingParser.java?view=diff&rev=524998&r1=524997&r2=524998 ============================================================================== --- incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customiztion/JAXWSBindingParser.java (original) +++ incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/customiztion/JAXWSBindingParser.java Mon Apr 2 19:13:40 2007 @@ -55,11 +55,13 @@ jaxwsBinding.setElementType(ToolConstants.JAXWS_BINDINGS); jaxwsBinding.setElement(element); jaxwsBinding.setDocumentBaseURI(namespace); + parseElement(jaxwsBinding, element); + return jaxwsBinding; } - public void parseElement(JAXWSBinding jaxwsBinding, Element element) { + void parseElement(JAXWSBinding jaxwsBinding, Element element) { NodeList children = element.getChildNodes(); if (children != null && children.getLength() == 0) { // global binding @@ -126,7 +128,8 @@ String clzName = childElement.getAttribute("name"); String javadoc = ""; Node docChild = DOMUtils.getChild(child, Element.ELEMENT_NODE); - if (this.isJAXWSClassDoc(docChild)) { + + if (docChild != null && this.isJAXWSClassDoc(docChild)) { javadoc = DOMUtils.getContent(docChild); } @@ -182,7 +185,6 @@ private Boolean isAsyncElement(Node node) { return "enableAsyncMapping".equals(node.getLocalName()) && ToolConstants.NS_JAXWS_BINDINGS.equals(node.getNamespaceURI()); - } private Boolean isWrapperStyle(Node node) { Modified: incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/HandlerConfigGenerator.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/HandlerConfigGenerator.java?view=diff&rev=524998&r1=524997&r2=524998 ============================================================================== --- incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/HandlerConfigGenerator.java (original) +++ incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/HandlerConfigGenerator.java Mon Apr 2 19:13:40 2007 @@ -55,7 +55,7 @@ } public void setJavaInterface(JavaInterface javaInterface) { - this.intf = javaInterface; + this.intf = javaInterface; } public void generate(ToolContext penv) throws ToolException { Modified: incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/SEIGenerator.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/SEIGenerator.java?view=diff&rev=524998&r1=524997&r2=524998 ============================================================================== --- incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/SEIGenerator.java (original) +++ incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/SEIGenerator.java Mon Apr 2 19:13:40 2007 @@ -19,7 +19,6 @@ package org.apache.cxf.tools.wsdlto.frontend.jaxws.generators; -import java.util.Iterator; import java.util.Map; import org.apache.cxf.common.i18n.Message; @@ -77,9 +76,7 @@ } return; } - for (Iterator iter = interfaces.keySet().iterator(); iter.hasNext();) { - String interfaceName = (String)iter.next(); - JavaInterface intf = interfaces.get(interfaceName); + for (JavaInterface intf : interfaces.values()) { if (hasHandlerConfig(intf)) { HandlerConfigGenerator handlerGen = new HandlerConfigGenerator(); @@ -88,8 +85,10 @@ handlerGen.setJavaInterface(intf); handlerGen.generate(getEnvironment()); - if (handlerGen.getHandlerAnnotation() != null) { - intf.addAnnotation(handlerGen.getHandlerAnnotation().toString()); + String annot = handlerGen.getHandlerAnnotation().toString(); + if (handlerGen.getHandlerAnnotation() != null + && !intf.getAnnotations().contains(annot)) { + intf.addAnnotation(annot); intf.addImport("javax.jws.HandlerChain"); } } Modified: incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/ServiceGenerator.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/ServiceGenerator.java?view=diff&rev=524998&r1=524997&r2=524998 ============================================================================== --- incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/ServiceGenerator.java (original) +++ incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/ServiceGenerator.java Mon Apr 2 19:13:40 2007 @@ -19,7 +19,6 @@ package org.apache.cxf.tools.wsdlto.frontend.jaxws.generators; -import java.util.Iterator; import java.util.Map; import org.apache.cxf.common.i18n.Message; @@ -63,7 +62,7 @@ } Map serviceClasses = javaModel.getServiceClasses(); - + if (serviceClasses.size() == 0) { ServiceInfo serviceInfo = (ServiceInfo)env.get(ServiceInfo.class); String wsdl = serviceInfo.getDescription().getBaseURI(); @@ -74,12 +73,7 @@ return; } - Iterator ite = serviceClasses.values().iterator(); - - while (ite.hasNext()) { - - JavaServiceClass js = (JavaServiceClass)ite.next(); - + for (JavaServiceClass js : serviceClasses.values()) { String location = (String)env.get(ToolConstants.CFG_WSDLURL); clearAttributes(); @@ -88,7 +82,8 @@ setAttributes("wsdlLocation", location); setCommonAttributes(); - doWrite(SERVICE_TEMPLATE, parseOutputName(js.getPackageName(), js.getName())); + doWrite(SERVICE_TEMPLATE, parseOutputName(js.getPackageName(), + js.getName())); } } } Modified: incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/WSDLToJavaProcessor.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/WSDLToJavaProcessor.java?view=diff&rev=524998&r1=524997&r2=524998 ============================================================================== --- incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/WSDLToJavaProcessor.java (original) +++ incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/WSDLToJavaProcessor.java Mon Apr 2 19:13:40 2007 @@ -20,8 +20,17 @@ package org.apache.cxf.tools.wsdlto.frontend.jaxws.processor; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.xml.namespace.QName; + import org.apache.cxf.common.i18n.Message; +import org.apache.cxf.helpers.CastUtils; import org.apache.cxf.service.model.ServiceInfo; +import org.apache.cxf.tools.common.ClassNameProcessor; import org.apache.cxf.tools.common.ToolException; import org.apache.cxf.tools.common.model.JavaInterface; import org.apache.cxf.tools.common.model.JavaModel; @@ -31,8 +40,19 @@ import org.apache.cxf.tools.wsdlto.frontend.jaxws.processor.internal.annotator.BindingAnnotator; import org.apache.cxf.tools.wsdlto.frontend.jaxws.processor.internal.annotator.WebServiceAnnotator; -public class WSDLToJavaProcessor extends WSDLToProcessor { +public class WSDLToJavaProcessor extends WSDLToProcessor implements ClassNameProcessor { + private static final String MODEL_MAP = WSDLToProcessor.class.getName() + + ".MODEL_MAP"; + + + public void processClassNames() { + ServiceInfo serviceInfo = context.get(ServiceInfo.class); + + PortTypeProcessor portTypeProcessor = new PortTypeProcessor(context); + portTypeProcessor.processClassNames(serviceInfo); + } + public void process() throws ToolException { super.process(); @@ -46,21 +66,38 @@ } private JavaModel wsdlDefinitionToJavaModel(ServiceInfo serviceInfo) throws ToolException { - JavaModel javaModel = new JavaModel(); + JavaModel javaModel = null; + Map map = CastUtils.cast((Map)context.get(MODEL_MAP)); + if (map == null) { + map = new HashMap(); + context.put(MODEL_MAP, map); + } + if (map.containsKey(serviceInfo.getName())) { + javaModel = map.get(serviceInfo.getName()); + } else { + javaModel = new JavaModel(); + map.put(serviceInfo.getName(), javaModel); + } context.put(JavaModel.class, javaModel); + List interfaces = new ArrayList(); + interfaces.addAll(javaModel.getInterfaces().values()); + PortTypeProcessor portTypeProcessor = new PortTypeProcessor(context); portTypeProcessor.process(serviceInfo); ServiceProcessor serviceProcessor = new ServiceProcessor(context); serviceProcessor.process(serviceInfo); - if (javaModel.getInterfaces().values().iterator().hasNext()) { - JavaInterface intf = javaModel.getInterfaces().values().iterator().next(); - intf.annotate(new WebServiceAnnotator()); - if (serviceInfo.getBindings().size() > 0) { - intf.annotate(new BindingAnnotator()); + + for (JavaInterface intf : javaModel.getInterfaces().values()) { + if (!interfaces.contains(intf)) { + intf.annotate(new WebServiceAnnotator()); + if (serviceInfo.getBindings().size() > 0) { + intf.annotate(new BindingAnnotator()); + } } } return javaModel; } + } Modified: incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/FaultProcessor.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/FaultProcessor.java?view=diff&rev=524998&r1=524997&r2=524998 ============================================================================== --- incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/FaultProcessor.java (original) +++ incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/FaultProcessor.java Mon Apr 2 19:13:40 2007 @@ -35,6 +35,7 @@ import org.apache.cxf.tools.common.model.JavaModel; import org.apache.cxf.tools.util.ClassCollector; import org.apache.cxf.tools.util.NameUtil; +import org.apache.cxf.tools.wsdlto.frontend.jaxws.customiztion.JAXWSBinding; public class FaultProcessor extends AbstractProcessor { private ClassCollector collector; @@ -66,11 +67,25 @@ @SuppressWarnings("unchecked") private void processFault(JavaMethod method, FaultInfo faultMessage) throws ToolException { JavaModel model = method.getInterface().getJavaModel(); - String name = NameUtil.mangleNameToClassName(faultMessage.getName().getLocalPart()); - //Fix issue 305770 + String name = NameUtil.mangleNameToClassName(faultMessage.getName().getLocalPart()); String namespace = faultMessage.getName().getNamespaceURI(); String packageName = ProcessorUtil.parsePackageName(namespace, context.mapPackageName(namespace)); + if (namespace.equals(method.getInterface().getNamespace())) { + packageName = method.getInterface().getPackageName(); + } + + + JAXWSBinding jaxwsBinding = faultMessage.getExtensor(JAXWSBinding.class); + if (jaxwsBinding != null) { + if (jaxwsBinding.getPackage() != null) { + packageName = jaxwsBinding.getPackage(); + } + if (jaxwsBinding.getJaxwsClass() != null + && jaxwsBinding.getJaxwsClass().getClassName() != null) { + name = jaxwsBinding.getJaxwsClass().getClassName(); + } + } while (isNameCollision(packageName, name)) { name = name + "_Exception"; @@ -107,9 +122,9 @@ } String fType = ProcessorUtil.getType(part, context, false); - String fPackageName = ProcessorUtil.parsePackageName(fNamespace, - context.mapPackageName(fNamespace)); - + + //REVISIT - custom JAXB package names + String fPackageName = method.getInterface().getPackageName(); JavaField fField = new JavaField(fName, fType, fNamespace); Modified: incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/PortTypeProcessor.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/PortTypeProcessor.java?view=diff&rev=524998&r1=524997&r2=524998 ============================================================================== --- incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/PortTypeProcessor.java (original) +++ incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/PortTypeProcessor.java Mon Apr 2 19:13:40 2007 @@ -36,6 +36,7 @@ import org.apache.cxf.tools.common.ToolException; import org.apache.cxf.tools.common.model.JavaInterface; import org.apache.cxf.tools.common.model.JavaModel; +import org.apache.cxf.tools.util.ClassCollector; import org.apache.cxf.tools.wsdlto.frontend.jaxws.customiztion.JAXWSBinding; import org.apache.cxf.tools.wsdlto.frontend.jaxws.processor.internal.mapper.InterfaceMapper; @@ -46,6 +47,36 @@ super(c); } + public void processClassNames(ServiceInfo serviceInfo) throws ToolException { + InterfaceInfo interfaceInfo = serviceInfo.getInterface(); + if (interfaceInfo == null) { + return; + } + + JavaInterface intf = new InterfaceMapper(context).map(interfaceInfo); + + JAXWSBinding jaxwsBinding = serviceInfo.getDescription().getExtensor(JAXWSBinding.class); + JAXWSBinding infBinding = interfaceInfo.getExtensor(JAXWSBinding.class); + if (infBinding != null && infBinding.getPackage() != null) { + intf.setPackageName(infBinding.getPackage()); + } else if (jaxwsBinding != null && jaxwsBinding.getPackage() != null) { + intf.setPackageName(jaxwsBinding.getPackage()); + } + + String name = intf.getName(); + if (infBinding != null + && infBinding.getJaxwsClass() != null + && infBinding.getJaxwsClass().getClassName() != null) { + name = infBinding.getJaxwsClass().getClassName(); + } + intf.setName(name); + + ClassCollector collector = context.get(ClassCollector.class); + collector.addSeiClassName(intf.getPackageName(), + intf.getName(), + intf.getPackageName() + "." + intf.getName()); + } + public void process(ServiceInfo serviceInfo) throws ToolException { operationMap.clear(); JavaModel jmodel = context.get(JavaModel.class); @@ -61,12 +92,20 @@ intf.setJavaModel(jmodel); JAXWSBinding jaxwsBinding = serviceInfo.getDescription().getExtensor(JAXWSBinding.class); - JAXWSBinding infBinding = interfaceInfo.getDescription().getExtensor(JAXWSBinding.class); + JAXWSBinding infBinding = interfaceInfo.getExtensor(JAXWSBinding.class); if (infBinding != null && infBinding.getPackage() != null) { intf.setPackageName(infBinding.getPackage()); } else if (jaxwsBinding != null && jaxwsBinding.getPackage() != null) { intf.setPackageName(jaxwsBinding.getPackage()); } + + String name = intf.getName(); + if (infBinding != null + && infBinding.getJaxwsClass() != null + && infBinding.getJaxwsClass().getClassName() != null) { + name = infBinding.getJaxwsClass().getClassName(); + } + intf.setName(name); Element handler = (Element)context.get(ToolConstants.HANDLER_CHAIN); intf.setHandlerChains(handler); Modified: incubator/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/incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ProcessorUtil.java?view=diff&rev=524998&r1=524997&r2=524998 ============================================================================== --- incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ProcessorUtil.java (original) +++ incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ProcessorUtil.java Mon Apr 2 19:13:40 2007 @@ -73,9 +73,9 @@ String type = ""; DataBindingProfile dataBinding = context.get(DataBindingProfile.class); if (part.isElement()) { - type = dataBinding.getType(getElementName(part)); + type = dataBinding.getType(getElementName(part), true); } else { - type = dataBinding.getType(part.getTypeQName()); + type = dataBinding.getType(part.getTypeQName(), false); } if (type == null) { type = resolvePartType(part); @@ -122,9 +122,9 @@ } String name = ""; if (part.isElement()) { - name = dataBinding.getType(getElementName(part)); + name = dataBinding.getType(getElementName(part), true); } else { - name = dataBinding.getType(part.getTypeQName()); + name = dataBinding.getType(part.getTypeQName(), false); } return name; } @@ -197,7 +197,7 @@ if (!primitiveType && dataBinding != null) { - jtype = dataBinding.getType(xmlTypeName); + jtype = dataBinding.getType(xmlTypeName, true); } if (!primitiveType && dataBinding == null) { Modified: incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ServiceProcessor.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ServiceProcessor.java?view=diff&rev=524998&r1=524997&r2=524998 ============================================================================== --- incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ServiceProcessor.java (original) +++ incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ServiceProcessor.java Mon Apr 2 19:13:40 2007 @@ -110,12 +110,10 @@ String namespace = service.getName().getNamespaceURI(); String packageName = ProcessorUtil.parsePackageName(namespace, context.mapPackageName(namespace)); - while (isNameCollision(packageName, name)) { - name = name + "_Service"; - } //customizing JAXWSBinding serviceBinding = service.getDescription().getExtensor(JAXWSBinding.class); + JAXWSBinding serviceBinding2 = service.getExtensor(JAXWSBinding.class); //TODO : Handle service customized class if (serviceBinding != null) { @@ -134,18 +132,52 @@ if (serviceBinding.isEnableWrapperStyle()) { jaxwsBinding.setEnableWrapperStyle(true); } + if (serviceBinding.getJaxwsClass() != null + && serviceBinding.getJaxwsClass().getClassName() != null) { + name = serviceBinding.getJaxwsClass().getClassName(); + } + } + if (serviceBinding2 != null) { + if (serviceBinding2.getPackage() != null) { + jaxwsBinding.setPackage(serviceBinding2.getPackage()); + } + + if (serviceBinding2.isEnableAsyncMapping()) { + jaxwsBinding.setEnableAsyncMapping(true); + } + + if (serviceBinding2.isEnableMime()) { + jaxwsBinding.setEnableMime(true); + } + + if (serviceBinding2.isEnableWrapperStyle()) { + jaxwsBinding.setEnableWrapperStyle(true); + } + if (serviceBinding2.getJaxwsClass() != null + && serviceBinding2.getJaxwsClass().getClassName() != null) { + name = serviceBinding2.getJaxwsClass().getClassName(); + } } - sclz.setName(name); sclz.setServiceName(service.getName().getLocalPart()); sclz.setNamespace(namespace); if (jaxwsBinding.getPackage() != null) { - sclz.setPackageName(jaxwsBinding.getPackage()); - } else { - sclz.setPackageName(packageName); + packageName = jaxwsBinding.getPackage(); + } + sclz.setPackageName(packageName); + + while (isNameCollision(packageName, name)) { + name = name + "_Service"; } + sclz.setName(name); + + if (model.getServiceClasses().containsKey(name)) { + sclz = model.getServiceClasses().get(name); + } + + Collection ports = service.getEndpoints(); for (EndpointInfo port : ports) { @@ -239,11 +271,13 @@ jaxwsBinding.setJaxwsPara(bopBinding.getJaxwsPara()); } } - - String portType = NameUtil.mangleNameToClassName(binding.getInterface().getName().getLocalPart()); - - JavaInterface jf = model.getInterfaces().get(portType); - + JavaInterface jf = null; + for (JavaInterface jf2 : model.getInterfaces().values()) { + if (binding.getInterface().getName().getLocalPart() + .equals(jf2.getWebServiceName())) { + jf = jf2; + } + } if (isSoapBinding()) { SoapBinding soapBinding = (SoapBinding)bindingObj; if (SOAPBindingUtil.getSoapStyle(soapBinding.getStyle()) == null) { Modified: incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/mapper/MethodMapper.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/mapper/MethodMapper.java?view=diff&rev=524998&r1=524997&r2=524998 ============================================================================== --- incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/mapper/MethodMapper.java (original) +++ incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/mapper/MethodMapper.java Mon Apr 2 19:13:40 2007 @@ -23,6 +23,7 @@ import org.apache.cxf.service.model.OperationInfo; import org.apache.cxf.tools.common.model.JavaMethod; +import org.apache.cxf.tools.wsdlto.frontend.jaxws.customiztion.JAXWSBinding; import org.apache.cxf.tools.wsdlto.frontend.jaxws.processor.internal.ProcessorUtil; public final class MethodMapper { @@ -36,6 +37,13 @@ method.setName(ProcessorUtil.mangleNameToVariableName(operationName)); method.setOperationName(operationName); + + JAXWSBinding opBinding = operation.getExtensor(JAXWSBinding.class); + if (opBinding != null + && opBinding.getMethodName() != null) { + method.setName(opBinding.getMethodName()); + } + if (operation.isOneWay()) { method.setStyle(OperationType.ONE_WAY); Modified: incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/wsdl11/JAXWSDefinitionBuilder.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/wsdl11/JAXWSDefinitionBuilder.java?view=diff&rev=524998&r1=524997&r2=524998 ============================================================================== --- incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/wsdl11/JAXWSDefinitionBuilder.java (original) +++ incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/wsdl11/JAXWSDefinitionBuilder.java Mon Apr 2 19:13:40 2007 @@ -33,8 +33,10 @@ import javax.wsdl.Binding; import javax.wsdl.BindingOperation; import javax.wsdl.Definition; +import javax.wsdl.Fault; import javax.wsdl.Operation; import javax.wsdl.PortType; +import javax.wsdl.Service; import javax.wsdl.extensions.ExtensionRegistry; import javax.wsdl.xml.WSDLReader; @@ -92,6 +94,8 @@ private void registerJaxwsExtension(ExtensionRegistry registry) { registerJAXWSBinding(registry, Definition.class); + registerJAXWSBinding(registry, Service.class); + registerJAXWSBinding(registry, Fault.class); registerJAXWSBinding(registry, PortType.class); registerJAXWSBinding(registry, Operation.class); registerJAXWSBinding(registry, Binding.class); Modified: incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/test/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/DummyDataBinding.java URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/test/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/DummyDataBinding.java?view=diff&rev=524998&r1=524997&r2=524998 ============================================================================== --- incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/test/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/DummyDataBinding.java (original) +++ incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/test/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/DummyDataBinding.java Mon Apr 2 19:13:40 2007 @@ -28,7 +28,7 @@ public void generate(ToolContext context) throws ToolException { } - public String getType(QName qn) { + public String getType(QName qn, boolean element) { return null; } Modified: incubator/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/swa-mime.wsdl URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/swa-mime.wsdl?view=diff&rev=524998&r1=524997&r2=524998 ============================================================================== --- incubator/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/swa-mime.wsdl (original) +++ incubator/cxf/trunk/tools/wsdlto/test/src/test/resources/wsdl2java_wsdl/swa-mime.wsdl Mon Apr 2 19:13:40 2007 @@ -27,6 +27,13 @@ xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"> + + + + + + @@ -41,12 +48,6 @@ - - - - - @@ -55,8 +56,8 @@ - - + + @@ -72,23 +73,23 @@ - + - + - + - + - +