You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ff...@apache.org on 2011/06/08 12:17:41 UTC
svn commit: r1133327 - in /cxf/trunk:
api/src/main/java/org/apache/cxf/tools/common/
maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/
tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/
tools/wsdlto/frontend/jaxws/src/ma...
Author: ffang
Date: Wed Jun 8 10:17:40 2011
New Revision: 1133327
URL: http://svn.apache.org/viewvc?rev=1133327&view=rev
Log:
[CXF-3566]not put serialVersionUID in generated faults by default
Added:
cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/FaultSerialVersionUID.java
Modified:
cxf/trunk/api/src/main/java/org/apache/cxf/tools/common/ToolConstants.java
cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/Option.java
cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WsdlOption.java
cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/wsdlto.xml
cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/FaultGenerator.java
cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/jaxws-toolspec.xml
cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/fault.vm
cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java
Modified: cxf/trunk/api/src/main/java/org/apache/cxf/tools/common/ToolConstants.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/tools/common/ToolConstants.java?rev=1133327&r1=1133326&r2=1133327&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/tools/common/ToolConstants.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/tools/common/ToolConstants.java Wed Jun 8 10:17:40 2011
@@ -92,7 +92,7 @@ public final class ToolConstants {
public static final String CFG_NO_ADDRESS_BINDING = "noAddressBinding";
public static final String CFG_ALLOW_ELEMENT_REFS = "allowElementReferences";
public static final String CFG_RESERVE_NAME = "reserveClass";
- public static final String CFG_USE_FQCN_FAULT_SERIAL_VERSION_UID = "useFQCNForFaultSerialVersionUID";
+ public static final String CFG_FAULT_SERIAL_VERSION_UID = "faultSerialVersionUID";
public static final String CFG_MARK_GENERATED = "mark-generated";
Modified: cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/Option.java
URL: http://svn.apache.org/viewvc/cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/Option.java?rev=1133327&r1=1133326&r2=1133327&view=diff
==============================================================================
--- cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/Option.java (original)
+++ cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/Option.java Wed Jun 8 10:17:40 2011
@@ -23,6 +23,8 @@ import java.io.File;
import java.util.ArrayList;
import java.util.List;
+import org.apache.cxf.tools.wsdlto.frontend.jaxws.generators.FaultSerialVersionUID;
+
public class Option {
static final String DEFAULT_BINDING_FILE_PATH = "src" + File.separator + "main"
@@ -142,9 +144,9 @@ public class Option {
Boolean noTypes;
/**
- * Enables generation of fault Exception's SUID based on hash of classname.
+ * specify how to generate fault Exception's SUID, default is NONE
*/
- Boolean useFQCNForFaultSerialVersionUID;
+ FaultSerialVersionUID faultSerialVersionUID;
/**
* Uses @Generated annotation in all generated java classes if the flag is set to true.
@@ -329,12 +331,12 @@ public class Option {
this.noTypes = noTypes;
}
- public boolean isUseFQCNForFaultSerialVersionUID() {
- return useFQCNForFaultSerialVersionUID == null ? false : useFQCNForFaultSerialVersionUID;
+ public FaultSerialVersionUID getFaultSerialVersionUID() {
+ return faultSerialVersionUID == null ? FaultSerialVersionUID.NONE : faultSerialVersionUID;
}
- public void setUseFQCNForFaultSerialVersionUID(boolean useFQCNForFaultSerialVersionUID) {
- this.useFQCNForFaultSerialVersionUID = useFQCNForFaultSerialVersionUID;
+ public void setFaultSerialVersionUID(FaultSerialVersionUID faultSerialVersionUID) {
+ this.faultSerialVersionUID = faultSerialVersionUID;
}
public Boolean isMarkGenerated() {
@@ -413,7 +415,7 @@ public class Option {
destination.setServiceName(getServiceName());
destination.setValidateWsdl(isValidateWsdl());
destination.setNoTypes(isNoTypes());
- destination.setUseFQCNForFaultSerialVersionUID(isUseFQCNForFaultSerialVersionUID());
+ destination.setFaultSerialVersionUID(getFaultSerialVersionUID());
destination.setMarkGenerated(isMarkGenerated());
destination.setAllowElementRefs(isAllowElementRefs());
if (isSetWsdlLocation()) {
@@ -434,8 +436,8 @@ public class Option {
extendedSoapHeaders = setIfNull(extendedSoapHeaders, defaultOptions.extendedSoapHeaders);
noTypes = setIfNull(noTypes, defaultOptions.noTypes);
validateWsdl = setIfNull(validateWsdl, defaultOptions.validateWsdl);
- useFQCNForFaultSerialVersionUID = setIfNull(useFQCNForFaultSerialVersionUID,
- defaultOptions.useFQCNForFaultSerialVersionUID);
+ faultSerialVersionUID = setIfNull(faultSerialVersionUID,
+ defaultOptions.faultSerialVersionUID);
markGenerated = setIfNull(markGenerated, defaultOptions.markGenerated);
autoNameResolution = setIfNull(autoNameResolution, defaultOptions.autoNameResolution);
noAddressBinding = setIfNull(noAddressBinding, defaultOptions.noAddressBinding);
Modified: cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WsdlOption.java
URL: http://svn.apache.org/viewvc/cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WsdlOption.java?rev=1133327&r1=1133326&r2=1133327&view=diff
==============================================================================
--- cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WsdlOption.java (original)
+++ cxf/trunk/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/WsdlOption.java Wed Jun 8 10:17:40 2011
@@ -151,11 +151,11 @@ public class WsdlOption extends Option {
addIfTrue(list, isNoTypes(), "-noTypes");
addIfTrue(list, isAllowElementRefs(), "-allowElementRefs");
addIfTrue(list, isValidateWsdl(), "-validate");
- addIfTrue(list, isUseFQCNForFaultSerialVersionUID(), "-useFQCNForFaultSerialVersionUID");
addIfTrue(list, isMarkGenerated() != null && isMarkGenerated(), "-mark-generated");
addIfNotNull(list, getDefaultExcludesNamespace(), "-dex");
addIfNotNull(list, getDefaultNamespacePackageMapping(), "-dns");
addIfNotNull(list, getServiceName(), "-sn");
+ addIfNotNull(list, getFaultSerialVersionUID(), "-faultSerialVersionUID");
addIfTrue(list, isAutoNameResolution(), "-autoNameResolution");
addIfTrue(list, isNoAddressBinding(), "-noAddressBinding");
addList(list, "-xjc", false, getXJCargs());
Modified: cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/wsdlto.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/wsdlto.xml?rev=1133327&r1=1133326&r2=1133327&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/wsdlto.xml (original)
+++ cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/wsdlto.xml Wed Jun 8 10:17:40 2011
@@ -196,12 +196,11 @@ under the License.
</associatedArgument>
</option>
- <option id="useFQCNForFaultSerialVersionUID" maxOccurs="1">
+ <option id="faultSerialVersionUID" maxOccurs="1">
<annotation>
- Enable generation of Serial Version UID in fault Exception(s) based on hashcode
- of the fully qualified class name of the Exception.
+ specify how to generate fault Exception's SUID, can use NONE|TIMESTAMP|FQCN, the default is NONE
</annotation>
- <switch>useFQCNForFaultSerialVersionUID</switch>
+ <switch>faultSerialVersionUID</switch>
</option>
</optionGroup>
Modified: cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/FaultGenerator.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/FaultGenerator.java?rev=1133327&r1=1133326&r2=1133327&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/FaultGenerator.java (original)
+++ cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/FaultGenerator.java Wed Jun 8 10:17:40 2011
@@ -16,7 +16,6 @@
* specific language governing permissions and limitations
* under the License.
*/
-
package org.apache.cxf.tools.wsdlto.frontend.jaxws.generators;
import java.text.SimpleDateFormat;
@@ -81,10 +80,16 @@ public class FaultGenerator extends Abst
exceptionClasses.get(expClassName);
clearAttributes();
- if (penv.containsKey(ToolConstants.CFG_USE_FQCN_FAULT_SERIAL_VERSION_UID)) {
- setAttributes("suid", generateHashSUID(expClz.getFullClassName()));
- } else {
- setAttributes("suid", generateTimestampSUID());
+
+ if (penv.containsKey(ToolConstants.CFG_FAULT_SERIAL_VERSION_UID)) {
+ FaultSerialVersionUID faultSerialVersionUID
+ = (FaultSerialVersionUID)penv.get(ToolConstants.CFG_FAULT_SERIAL_VERSION_UID);
+ setAttributes("faultSerialVersionUID", faultSerialVersionUID);
+ if (faultSerialVersionUID.equals(FaultSerialVersionUID.FQCN)) {
+ setAttributes("suid", generateHashSUID(expClz.getFullClassName()));
+ } else if (faultSerialVersionUID.equals(FaultSerialVersionUID.TIMESTAMP)) {
+ setAttributes("suid", generateTimestampSUID());
+ }
}
setAttributes("expClass", expClz);
String exceptionSuperclass = "Exception";
Added: cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/FaultSerialVersionUID.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/FaultSerialVersionUID.java?rev=1133327&view=auto
==============================================================================
--- cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/FaultSerialVersionUID.java (added)
+++ cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/FaultSerialVersionUID.java Wed Jun 8 10:17:40 2011
@@ -0,0 +1,26 @@
+/**
+ * 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.wsdlto.frontend.jaxws.generators;
+
+public enum FaultSerialVersionUID {
+ NONE,
+ TIMESTAMP,
+ FQCN
+}
Modified: cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/jaxws-toolspec.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/jaxws-toolspec.xml?rev=1133327&r1=1133326&r2=1133327&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/jaxws-toolspec.xml (original)
+++ cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/jaxws-toolspec.xml Wed Jun 8 10:17:40 2011
@@ -311,12 +311,11 @@ Examples:
<switch>noAddressBinding</switch>
</option>
- <option id="useFQCNForFaultSerialVersionUID" maxOccurs="1">
+ <option id="faultSerialVersionUID" maxOccurs="1">
<annotation>
- Enable generation of Serial Version UID in fault Exception(s) based on hashcode
- of the fully qualified class name of the Exception.
+ specify how to generate fault Exception's SUID, can use NONE|TIMESTAMP|FQCN, the default is NONE
</annotation>
- <switch>useFQCNForFaultSerialVersionUID</switch>
+ <switch>faultSerialVersionUID</switch>
</option>
<option id="mark-generated" maxOccurs="1">
@@ -373,4 +372,4 @@ Examples:
wsdl-url</annotation>
</argument>
</usage>
-</toolspec>
\ No newline at end of file
+</toolspec>
Modified: cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/fault.vm
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/fault.vm?rev=1133327&r1=1133326&r2=1133327&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/fault.vm (original)
+++ cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/fault.vm Wed Jun 8 10:17:40 2011
@@ -43,7 +43,9 @@ public class $expClass.Name extends $exc
#if ($mark-generated == "true")
@Generated(value = "org.apache.cxf.tools.wsdlto.WSDLToJava", date = "$currentdate")
#end
+#if ($faultSerialVersionUID == "TIMESTAMP" || $faultSerialVersionUID == "FQCN")
public static final long serialVersionUID = ${suid}L;
+#end
#foreach ($field in $expClass.Fields)
#if ($mark-generated == "true")
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=1133327&r1=1133326&r2=1133327&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 Wed Jun 8 10:17:40 2011
@@ -21,6 +21,7 @@ package org.apache.cxf.tools.wsdlto.jaxw
import java.io.File;
import java.io.ObjectStreamClass;
import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
@@ -46,6 +47,7 @@ import org.apache.cxf.tools.common.ToolC
import org.apache.cxf.tools.common.ToolException;
import org.apache.cxf.tools.util.AnnotationUtil;
import org.apache.cxf.tools.wsdlto.AbstractCodeGenTest;
+import org.apache.cxf.tools.wsdlto.frontend.jaxws.generators.FaultSerialVersionUID;
import org.junit.Test;
@@ -1338,7 +1340,7 @@ public class CodeGenTest extends Abstrac
@Test
public void testCXFNotType() throws Exception {
env.put(ToolConstants.CFG_WSDLURL, getLocation("/wsdl2java_wsdl/hello_world.wsdl"));
- env.put(ToolConstants.CFG_USE_FQCN_FAULT_SERIAL_VERSION_UID, Boolean.TRUE);
+ env.put(ToolConstants.CFG_FAULT_SERIAL_VERSION_UID, FaultSerialVersionUID.FQCN);
processor.setContext(env);
processor.execute();
@@ -1351,9 +1353,9 @@ public class CodeGenTest extends Abstrac
}
@Test
- public void testCXF2808() throws Exception {
+ public void testFaultSerialVersionUIDNONEFQCN() throws Exception {
env.put(ToolConstants.CFG_WSDLURL, getLocation("/wsdl2java_wsdl/hello_world.wsdl"));
- env.put(ToolConstants.CFG_USE_FQCN_FAULT_SERIAL_VERSION_UID, Boolean.TRUE);
+ env.put(ToolConstants.CFG_FAULT_SERIAL_VERSION_UID, FaultSerialVersionUID.FQCN);
processor.setContext(env);
processor.execute();
@@ -1363,6 +1365,8 @@ public class CodeGenTest extends Abstrac
assertTrue(faultFile.exists());
Class<?> fault = classLoader.loadClass("org.apache.cxf.w2j.hello_world_soap_http.NoSuchCodeLitFault");
+ Field serialVersionUID = fault.getDeclaredField("serialVersionUID");
+ assertNotNull(serialVersionUID);
assertEquals(fault.getName().hashCode(), ObjectStreamClass.lookup(fault).getSerialVersionUID());
fault = classLoader.loadClass("org.apache.cxf.w2j.hello_world_soap_http.BadRecordLitFault");
assertEquals(fault.getName().hashCode(), ObjectStreamClass.lookup(fault).getSerialVersionUID());
@@ -1370,6 +1374,84 @@ public class CodeGenTest extends Abstrac
@Test
+ public void testNoFaultSerialVersionUID() throws Exception {
+ env.put(ToolConstants.CFG_WSDLURL, getLocation("/wsdl2java_wsdl/hello_world.wsdl"));
+ processor.setContext(env);
+ processor.execute();
+
+ File faultFile = new File(output, "org/apache/cxf/w2j/hello_world_soap_http/NoSuchCodeLitFault.java");
+ assertTrue(faultFile.exists());
+ faultFile = new File(output, "org/apache/cxf/w2j/hello_world_soap_http/BadRecordLitFault.java");
+ assertTrue(faultFile.exists());
+
+ Class<?> fault = classLoader.loadClass("org.apache.cxf.w2j.hello_world_soap_http.NoSuchCodeLitFault");
+ try {
+ fault.getDeclaredField("serialVersionUID");
+ fail("shouldn't have serialVersionUID field");
+ } catch (NoSuchFieldException e) {
+ //
+ }
+ fault = classLoader.loadClass("org.apache.cxf.w2j.hello_world_soap_http.BadRecordLitFault");
+ try {
+ fault.getDeclaredField("serialVersionUID");
+ fail("shouldn't have serialVersionUID field");
+ } catch (NoSuchFieldException e) {
+ //
+ }
+
+ }
+
+ @Test
+ public void testFaultSerialVersionUIDNONE() throws Exception {
+ env.put(ToolConstants.CFG_WSDLURL, getLocation("/wsdl2java_wsdl/hello_world.wsdl"));
+ env.put(ToolConstants.CFG_FAULT_SERIAL_VERSION_UID, FaultSerialVersionUID.NONE);
+ processor.setContext(env);
+ processor.execute();
+
+ File faultFile = new File(output, "org/apache/cxf/w2j/hello_world_soap_http/NoSuchCodeLitFault.java");
+ assertTrue(faultFile.exists());
+ faultFile = new File(output, "org/apache/cxf/w2j/hello_world_soap_http/BadRecordLitFault.java");
+ assertTrue(faultFile.exists());
+
+ Class<?> fault = classLoader.loadClass("org.apache.cxf.w2j.hello_world_soap_http.NoSuchCodeLitFault");
+ try {
+ fault.getDeclaredField("serialVersionUID");
+ fail("shouldn't have serialVersionUID field");
+ } catch (NoSuchFieldException e) {
+ //
+ }
+ fault = classLoader.loadClass("org.apache.cxf.w2j.hello_world_soap_http.BadRecordLitFault");
+ try {
+ fault.getDeclaredField("serialVersionUID");
+ fail("shouldn't have serialVersionUID field");
+ } catch (NoSuchFieldException e) {
+ //
+ }
+
+ }
+
+ @Test
+ public void testFaultSerialVersionUIDNONETIMESTAMP() throws Exception {
+ env.put(ToolConstants.CFG_WSDLURL, getLocation("/wsdl2java_wsdl/hello_world.wsdl"));
+ env.put(ToolConstants.CFG_FAULT_SERIAL_VERSION_UID, FaultSerialVersionUID.TIMESTAMP);
+ processor.setContext(env);
+ processor.execute();
+
+ File faultFile = new File(output, "org/apache/cxf/w2j/hello_world_soap_http/NoSuchCodeLitFault.java");
+ assertTrue(faultFile.exists());
+ faultFile = new File(output, "org/apache/cxf/w2j/hello_world_soap_http/BadRecordLitFault.java");
+ assertTrue(faultFile.exists());
+
+ Class<?> fault = classLoader.loadClass("org.apache.cxf.w2j.hello_world_soap_http.NoSuchCodeLitFault");
+ Field serialVersionUID = fault.getDeclaredField("serialVersionUID");
+ assertNotNull(serialVersionUID);
+
+ fault = classLoader.loadClass("org.apache.cxf.w2j.hello_world_soap_http.BadRecordLitFault");
+ serialVersionUID = fault.getDeclaredField("serialVersionUID");
+ assertNotNull(serialVersionUID);
+ }
+
+ @Test
public void testExtensionWrapper() throws Exception {
env.put(ToolConstants.CFG_WSDLURL,
getLocation("/wsdl2java_wsdl/cxf2193/hello_world_extension_wrapped.wsdl"));