deki closed pull request #405: CXF-7708 Options mark-generated and
suppress-generated-date don't effect on generating Java classes
URL: https://github.com/apache/cxf/pull/405
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git a/maven-plugins/codegen-plugin/pom.xml
b/maven-plugins/codegen-plugin/pom.xml
index 907a543109a..698aae30e8d 100644
--- a/maven-plugins/codegen-plugin/pom.xml
+++ b/maven-plugins/codegen-plugin/pom.xml
@@ -183,10 +183,14 @@
<goal>verify</goal>
</goals>
<configuration>
+ <pomIncludes>
+ <!-- Enable listed it's. Exclude toolchain
till https://issues.apache.org/jira/browse/CXF-7714 is fixed -->
+
<pomInclude>wsdl-artifact-resolution/pom.xml</pomInclude>
+ <pomInclude>mark-generated/pom.xml</pomInclude>
+ </pomIncludes>
<settingsFile>src/it/settings.xml</settingsFile>
<cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
- <!-- disable toolchain till
https://issues.apache.org/jira/browse/CXF-7714 is fixed -->
- <invokerTest>!jdk-cxf-with-toolchain</invokerTest>
+ <postBuildHookScript>verify</postBuildHookScript>
</configuration>
</execution>
</executions>
diff --git
a/maven-plugins/codegen-plugin/src/it/mark-generated/Cxf7708Service-1.0.0.wsdl
b/maven-plugins/codegen-plugin/src/it/mark-generated/Cxf7708Service-1.0.0.wsdl
new file mode 100644
index 00000000000..96831031d81
--- /dev/null
+++
b/maven-plugins/codegen-plugin/src/it/mark-generated/Cxf7708Service-1.0.0.wsdl
@@ -0,0 +1,269 @@
+<?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:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://cxf.apache.org/w2j/hello_world_soap_http"
name="HelloWorld">
+ <wsdl:types>
+ <schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:x1="http://cxf.apache.org/w2j/hello_world_soap_http/types"
targetNamespace="http://cxf.apache.org/w2j/hello_world_soap_http/types"
elementFormDefault="qualified">
+ <element name="sayHi">
+ <complexType/>
+ </element>
+ <element name="sayHiResponse">
+ <complexType>
+ <sequence>
+ <element name="responseType" type="string"/>
+ </sequence>
+ </complexType>
+ </element>
+ <element name="greetMe">
+ <complexType>
+ <sequence>
+ <element name="requestType" type="string"/>
+ </sequence>
+ </complexType>
+ </element>
+ <element name="greetMeResponse">
+ <complexType>
+ <sequence>
+ <element name="responseType" type="string"/>
+ </sequence>
+ </complexType>
+ </element>
+ <element name="greetMeSometime">
+ <complexType>
+ <sequence>
+ <element name="requestType" type="string"/>
+ </sequence>
+ </complexType>
+ </element>
+ <element name="greetMeSometimeResponse">
+ <complexType>
+ <sequence>
+ <element name="responseType" type="string"/>
+ </sequence>
+ </complexType>
+ </element>
+ <element name="greetMeOneWay">
+ <complexType>
+ <sequence>
+ <element name="requestType" type="string"/>
+ </sequence>
+ </complexType>
+ </element>
+ <element name="testDocLitFault">
+ <complexType>
+ <sequence>
+ <element name="faultType" type="string"/>
+ </sequence>
+ </complexType>
+ </element>
+ <element name="testDocLitFaultResponse">
+ <complexType>
+ <sequence/>
+ </complexType>
+ </element>
+ <complexType name="ErrorCode">
+ <sequence>
+ <element name="minor" type="short"/>
+ <element name="major" type="short"/>
+ </sequence>
+ </complexType>
+ <element name="NoSuchCodeLit">
+ <complexType>
+ <sequence>
+ <element name="code" type="x1:ErrorCode"/>
+ </sequence>
+ </complexType>
+ </element>
+ <element name="BadRecordLit" type="string"/>
+ <complexType name="BadRecord">
+ <sequence>
+ <element name="reason" type="string"/>
+ <element name="code" type="short"/>
+ </sequence>
+ </complexType>
+ <complexType name="addNumbers">
+ <sequence>
+ <element name="arg0" type="int"/>
+ <element name="arg1" type="int"/>
+ </sequence>
+ </complexType>
+ <element name="addNumbers" type="x1:addNumbers"/>
+ <complexType name="addNumbersResponse">
+ <sequence>
+ <element name="return" type="int"/>
+ </sequence>
+ </complexType>
+ <element name="addNumbersResponse" type="x1:addNumbersResponse"/>
+ <element name="BareDocument" type="string"/>
+ <element name="BareDocumentResponse">
+ <complexType>
+ <sequence>
+ <element name="company" type="string"/>
+ </sequence>
+ <attribute name="id" type="int"/>
+ </complexType>
+ </element>
+ </schema>
+ </wsdl:types>
+ <wsdl:message name="sayHiRequest">
+ <wsdl:part name="in" element="x1:sayHi"/>
+ </wsdl:message>
+ <wsdl:message name="sayHiResponse">
+ <wsdl:part name="out" element="x1:sayHiResponse"/>
+ </wsdl:message>
+ <wsdl:message name="greetMeRequest">
+ <wsdl:part name="in" element="x1:greetMe"/>
+ </wsdl:message>
+ <wsdl:message name="greetMeResponse">
+ <wsdl:part name="out" element="x1:greetMeResponse"/>
+ </wsdl:message>
+ <wsdl:message name="greetMeSometimeRequest">
+ <wsdl:part name="in" element="x1:greetMeSometime"/>
+ </wsdl:message>
+ <wsdl:message name="greetMeSometimeResponse">
+ <wsdl:part name="out" element="x1:greetMeSometimeResponse"/>
+ </wsdl:message>
+ <wsdl:message name="greetMeOneWayRequest">
+ <wsdl:part name="in" element="x1:greetMeOneWay"/>
+ </wsdl:message>
+ <wsdl:message name="testDocLitFaultRequest">
+ <wsdl:part name="in" element="x1:testDocLitFault"/>
+ </wsdl:message>
+ <wsdl:message name="testDocLitFaultResponse">
+ <wsdl:part name="out" element="x1:testDocLitFaultResponse"/>
+ </wsdl:message>
+ <wsdl:message name="NoSuchCodeLitFault">
+ <wsdl:part name="NoSuchCodeLit" element="x1:NoSuchCodeLit"/>
+ </wsdl:message>
+ <wsdl:message name="BadRecordLitFault">
+ <wsdl:part name="BadRecordLit" element="x1:BadRecordLit"/>
+ </wsdl:message>
+ <wsdl:message name="testDocLitBareRequest">
+ <wsdl:part name="in" element="x1:BareDocument"/>
+ </wsdl:message>
+ <wsdl:message name="testDocLitBareResponse">
+ <wsdl:part name="out" element="x1:BareDocumentResponse"/>
+ </wsdl:message>
+ <wsdl:portType name="Greeter">
+ <wsdl:documentation>porttype documentation</wsdl:documentation>
+ <wsdl:operation name="sayHi">
+ <wsdl:documentation>porttype op documentation</wsdl:documentation>
+ <wsdl:input name="sayHiRequest" message="tns:sayHiRequest"/>
+ <wsdl:output name="sayHiResponse" message="tns:sayHiResponse"/>
+ </wsdl:operation>
+ <wsdl:operation name="greetMe">
+ <wsdl:input name="greetMeRequest" message="tns:greetMeRequest"/>
+ <wsdl:output name="greetMeResponse" message="tns:greetMeResponse"/>
+ </wsdl:operation>
+ <wsdl:operation name="greetMeSometime">
+ <wsdl:input name="greetMeSometimeRequest"
message="tns:greetMeSometimeRequest"/>
+ <wsdl:output name="greetMeSometimeResponse"
message="tns:greetMeSometimeResponse"/>
+ </wsdl:operation>
+ <wsdl:operation name="greetMeOneWay">
+ <wsdl:input name="greetMeOneWayRequest"
message="tns:greetMeOneWayRequest"/>
+ </wsdl:operation>
+ <wsdl:operation name="testDocLitFault">
+ <wsdl:input name="testDocLitFaultRequest"
message="tns:testDocLitFaultRequest"/>
+ <wsdl:output name="testDocLitFaultResponse"
message="tns:testDocLitFaultResponse"/>
+ <wsdl:fault name="NoSuchCodeLitFault"
message="tns:NoSuchCodeLitFault"/>
+ <wsdl:fault name="BadRecordLitFault"
message="tns:BadRecordLitFault"/>
+ </wsdl:operation>
+ <wsdl:operation name="testDocLitBare">
+ <wsdl:input name="testDocLitBareRequest"
message="tns:testDocLitBareRequest"/>
+ <wsdl:output name="testDocLitBareResponse"
message="tns:testDocLitBareResponse"/>
+ </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 style="document"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <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:operation name="greetMeSometime">
+ <soap:operation style="document"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="greetMeOneWay">
+ <soap:operation style="document"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ </wsdl:operation>
+ <wsdl:operation name="testDocLitFault">
+ <soap:operation style="document"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ <wsdl:fault name="NoSuchCodeLitFault">
+ <soap:fault name="NoSuchCodeLitFault" use="literal"/>
+ </wsdl:fault>
+ <wsdl:fault name="BadRecordLitFault">
+ <soap:fault name="BadRecordLitFault" use="literal"/>
+ </wsdl:fault>
+ </wsdl:operation>
+ <wsdl:operation name="testDocLitBare">
+ <soap:operation style="document"
soapAction="http://cxf.apache.org/w2j/hello_world_soap_http/testDocLitBare"/>
+ <wsdl:input name="testDocLitBareRequest">
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output name="testDocLitBareResponse">
+ <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
xmlns:wswa="http://www.w3.org/2005/02/addressing/wsdl"/>
+ </wsdl:port>
+ </wsdl:service>
+ <wsdl:service name="SOAPService_Test1">
+ <wsdl:documentation>service documentation</wsdl:documentation>
+ <wsdl:port name="SoapPort_Test1" binding="tns:Greeter_SOAPBinding">
+ <wsdl:documentation>port1 documentation</wsdl:documentation>
+ <soap:address location="http://localhost:9100"/>
+ </wsdl:port>
+ <wsdl:port name="SoapPort_Test2" binding="tns:Greeter_SOAPBinding">
+ <wsdl:documentation>port2 documentation</wsdl:documentation>
+ <soap:address location="http://localhost:9101"/>
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions>
diff --git a/maven-plugins/codegen-plugin/src/it/mark-generated/pom.xml
b/maven-plugins/codegen-plugin/src/it/mark-generated/pom.xml
new file mode 100644
index 00000000000..17ec1dfc8e5
--- /dev/null
+++ b/maven-plugins/codegen-plugin/src/it/mark-generated/pom.xml
@@ -0,0 +1,67 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf7708-codegen</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>jar</packaging>
+ <name>cxf7708-codegen</name>
+
+ <properties>
+ <wsdl.groupid>org.apache.cxf.cxf7708</wsdl.groupid>
+ <wsdl.artifactid>Cxf7708Service</wsdl.artifactid>
+ <wsdl.version>1.0.0</wsdl.version>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.5.2</version>
+ <executions>
+ <execution>
+ <phase>initialize</phase>
+ <goals>
+ <goal>install-file</goal>
+ </goals>
+ <configuration>
+ <groupId>${wsdl.groupid}</groupId>
+ <artifactId>${wsdl.artifactid}</artifactId>
+ <version>${wsdl.version}</version>
+ <packaging>wsdl</packaging>
+
<file>${wsdl.artifactid}-${wsdl.version}.wsdl</file>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-codegen-plugin</artifactId>
+ <version>3.2.5-SNAPSHOT</version>
+ <executions>
+ <execution>
+ <id>generate-sources</id>
+ <phase>generate-sources</phase>
+ <configuration>
+ <wsdlOptions>
+ <wsdlOption>
+ <wsdlArtifact>
+ <groupId>${wsdl.groupid}</groupId>
+
<artifactId>${wsdl.artifactid}</artifactId>
+ <version>${wsdl.version}</version>
+ </wsdlArtifact>
+
<wsdlLocation>classpath:${wsdl.artifactid}.wsdl</wsdlLocation>
+
<suppressGeneratedDate>true</suppressGeneratedDate>
+ <markGenerated>true</markGenerated>
+ </wsdlOption>
+ </wsdlOptions>
+ </configuration>
+ <goals>
+ <goal>wsdl2java</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/maven-plugins/codegen-plugin/src/it/mark-generated/verify.groovy
b/maven-plugins/codegen-plugin/src/it/mark-generated/verify.groovy
new file mode 100644
index 00000000000..795cffc71cd
--- /dev/null
+++ b/maven-plugins/codegen-plugin/src/it/mark-generated/verify.groovy
@@ -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.
+ */
+
+import javax.xml.bind.DatatypeConverter
+
+File generatedFile = new File( basedir,
'target/generated-sources/cxf/org/apache/cxf/w2j/hello_world_soap_http/Greeter.java'
)
+String generatedDate =
DatatypeConverter.printDateTime(Calendar.getInstance()).substring(1, 10)
+assert generatedFile.exists()
+assert generatedFile.text.contains('@Generated')
+assert !generatedFile.text.contains('* ' + generatedDate)
diff --git
a/maven-plugins/codegen-plugin/src/it/wsdl-artifact-resolution/pom.xml
b/maven-plugins/codegen-plugin/src/it/wsdl-artifact-resolution/pom.xml
index fd538231d95..e8604d164ce 100644
--- a/maven-plugins/codegen-plugin/src/it/wsdl-artifact-resolution/pom.xml
+++ b/maven-plugins/codegen-plugin/src/it/wsdl-artifact-resolution/pom.xml
@@ -29,7 +29,7 @@
<artifactId>${wsdl.artifactid}</artifactId>
<version>${wsdl.version}</version>
<packaging>wsdl</packaging>
- <file>Cxf7067Service-1.0.0.wsdl</file>
+
<file>${wsdl.artifactid}-${wsdl.version}.wsdl</file>
</configuration>
</execution>
</executions>
diff --git
a/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/wsdl2java/WsdlOption.java
b/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/wsdl2java/WsdlOption.java
index ec8646484d0..4d355b0ba94 100644
---
a/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/wsdl2java/WsdlOption.java
+++
b/maven-plugins/codegen-plugin/src/main/java/org/apache/cxf/maven_plugin/wsdl2java/WsdlOption.java
@@ -169,9 +169,9 @@ public String toString() {
list.add("-validate=" + getValidateWsdl());
}
addIfTrue(list, isMarkGenerated() != null && isMarkGenerated(),
- "-" + ToolConstants.CFG_MARK_GENERATED);
+ "-" + ToolConstants.CFG_MARK_GENERATED_OPTION);
addIfTrue(list, isSuppressGeneratedDate() != null &&
isSuppressGeneratedDate(),
- "-" + ToolConstants.CFG_SUPPRESS_GENERATED_DATE);
+ "-" + ToolConstants.CFG_SUPPRESS_GENERATED_DATE_OPTION);
addIfNotNull(list, getDefaultExcludesNamespace(), "-dex");
addIfNotNull(list, getDefaultNamespacePackageMapping(), "-dns");
addIfNotNull(list, getServiceName(), "-sn");
diff --git
a/tools/common/src/main/java/org/apache/cxf/tools/common/ToolConstants.java
b/tools/common/src/main/java/org/apache/cxf/tools/common/ToolConstants.java
index 5530ef541fe..9e15c43a6dc 100644
--- a/tools/common/src/main/java/org/apache/cxf/tools/common/ToolConstants.java
+++ b/tools/common/src/main/java/org/apache/cxf/tools/common/ToolConstants.java
@@ -100,8 +100,11 @@
public static final String CFG_FAULT_SERIAL_VERSION_UID =
"faultSerialVersionUID";
public static final String CFG_EXCEPTION_SUPER = "exceptionSuper";
public static final String CFG_SEI_SUPER = "seiSuper";
- public static final String CFG_MARK_GENERATED = "mark-generated";
- public static final String CFG_SUPPRESS_GENERATED_DATE =
"suppress-generated-date";
+ public static final String CFG_MARK_GENERATED = "markGenerated";
+ public static final String CFG_SUPPRESS_GENERATED_DATE =
"suppressGeneratedDate";
+
+ public static final String CFG_MARK_GENERATED_OPTION = "mark-generated";
+ public static final String CFG_SUPPRESS_GENERATED_DATE_OPTION =
"suppress-generated-date";
//Internal Flag to generate
public static final String CFG_IMPL_CLASS = "implClass";
diff --git
a/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/core/AbstractGenerator.java
b/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/core/AbstractGenerator.java
index 82ee3ac4ef3..2a1452ff68f 100644
---
a/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/core/AbstractGenerator.java
+++
b/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/core/AbstractGenerator.java
@@ -116,8 +116,9 @@ protected void setCommonAttributes() {
setAttributes("version", Version.getCurrentVersion());
setAttributes("fullversion", Version.getCompleteVersionString());
setAttributes("name", Version.getName());
- setAttributes("markGenerated",
env.optionSet(ToolConstants.CFG_MARK_GENERATED));
- setAttributes("suppressGeneratedDate",
env.optionSet(ToolConstants.CFG_SUPPRESS_GENERATED_DATE));
+ setAttributes(ToolConstants.CFG_MARK_GENERATED,
env.optionSet(ToolConstants.CFG_MARK_GENERATED));
+ setAttributes(ToolConstants.CFG_SUPPRESS_GENERATED_DATE,
+
env.optionSet(ToolConstants.CFG_SUPPRESS_GENERATED_DATE));
if (env.optionSet(ToolConstants.CFG_FRONTEND)) {
setAttributes("frontend", env.get(ToolConstants.CFG_FRONTEND));
}
diff --git
a/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java
b/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java
index 6e071d09766..163a77fb760 100644
---
a/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java
+++
b/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java
@@ -431,7 +431,7 @@ public void initialize(ToolContext c) throws ToolException {
// Add the @Generated annotation in the Java files generated. This
is done by passing
// '-mark-generated' attribute to jaxb xjc.
try {
- opts.parseArgument(new String[] {"-mark-generated" }, 0);
+ opts.parseArgument(new String[] {"-" +
ToolConstants.CFG_MARK_GENERATED_OPTION}, 0);
} catch (BadCommandLineException e) {
LOG.log(Level.SEVERE, e.getMessage());
throw new ToolException(e);
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services