This was a little tricky so I thought I'd share...

I am working on a test client for integrating with an external webservice using Axis2, and found a strange issue related to log4j configuration.

I was originally using:
* maven2 2.0.7
* axis2-wsdl2code-maven-plugin 1.4
* dependencies:
** <groupId>org.apache.axis2</groupId><artifactId>axis2</artifactId><version>1.4</version> ** <groupId>org.apache.axis2</groupId><artifactId>axis2-xmlbeans</artifactId><version>1.4</version>

I was able to define log4j.properties for the unit tests in /src/test/resources/log4j.properties per the following to output the SOAP request and response from Axis2:

---start log4j.properties---
# Set root category priority to INFO and its only appender to CONSOLE.
log4j.rootCategory=INFO, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

log4j.logger.httpclient.wire.content=DEBUG
---end log4j.properties---

Then I learned that I would need to use WS-Security for the client that there was only a 1.3 version of Axis2 rampart, which meant that I changed to use:

* (still) maven2 2.0.7
* axis2-wsdl2code-maven-plugin 1.3
* dependencies:
** <groupId>org.apache.axis2</groupId><artifactId>axis2</artifactId><version>1.3</version> ** <groupId>org.apache.axis2</groupId><artifactId>axis2-xmlbeans</artifactId><version>1.3</version> ** <groupId>org.apache.rampart</groupId><artifactId>rampart-core</artifactId><version>1.3</version>

(btw- I don't know yet whether those are all of the dependencies needed for rampart to work- am just starting down that road now)

When I did that though, I noticed when running unit tests in Maven 2 (using surefire and junit 3.8.1) that while running tests, it was ignoring my log4j.properties that I had defined that it was using previously.

My first solution to this was to define the path to the log4j.properties file as a system property in the surefire plugin. The following worked, but I didn't like it:

           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-surefire-plugin</artifactId>
               <configuration>
                   ...
                   <systemProperties>
                       <property>
                           <name>log4j.configuration</name>
<value>file:///path/to/project/src/main/resources/log4j.properties</value>
                       </property>
                   </systemProperties>
               </configuration>
           </plugin>

Then I thought that it had been a long time since I updated Maven 2, even though I didn't think that would have anything to do with it.

Sure enough, after updating to Maven 2.0.9, I could comment out/remove the hardcoded path to log4j.properties in the surefire plugin config, and it recognized the log4j.properties file regardless of whether I used 1.3 or 1.4 dependencies.

Hopefully this helps someone else...

Thanks,
Gary


By the way, here is the full thing that I have so far, using Maven 2.0.9 (using Axis2 1.3 for use with rampart 1.3. If you guys can see any dependencies that I'll need to get WS-Security to work client-side, please let me know).

pom.xml:
...
   <dependencies>
       <dependency>
           <groupId>commons-logging</groupId>
           <artifactId>commons-logging</artifactId>
           <version>1.1</version>
           <scope>provided</scope>
           <exclusions>
               <exclusion>
                   <groupId>logkit</groupId>
                   <artifactId>logkit</artifactId>
               </exclusion>
               <exclusion>
                   <groupId>avalon-framework</groupId>
                   <artifactId>avalon-framework</artifactId>
               </exclusion>
               <exclusion>
                   <groupId>javax.servlet</groupId>
                   <artifactId>servlet-api</artifactId>
               </exclusion>
           </exclusions>
       </dependency>

       <dependency>
           <groupId>org.apache.axis2</groupId>
           <artifactId>axis2</artifactId>
           <version>1.3</version>
       </dependency>

       <dependency>
           <groupId>org.apache.axis2</groupId>
           <artifactId>axis2-xmlbeans</artifactId>
           <version>1.3</version>
       </dependency>

       <dependency>
           <groupId>org.apache.rampart</groupId>
           <artifactId>rampart-core</artifactId>
           <version>1.3</version>
       </dependency>

       <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>3.8.1</version>
           <scope>test</scope>
       </dependency>
   </dependencies>

   <build>
       <plugins>
           <plugin>
               <artifactId>maven-compiler-plugin</artifactId>
               <configuration>
                   <source>1.5</source>
                   <target>1.5</target>
               </configuration>
           </plugin>

           <plugin>
               <groupId>org.apache.axis2</groupId>
               <artifactId>axis2-wsdl2code-maven-plugin</artifactId>
               <version>1.3</version>
               <configuration>
<packageName>edu.duke.oit.psv9integration.client</packageName> <wsdlFile>...relative path to wsdl including wsdl filename...</wsdlFile>
                   <generateTestcase>true</generateTestcase>
                   <databindingName>xmlbeans</databindingName>
               </configuration>
               <executions>
                   <execution>
                       <goals>
                           <goal>wsdl2code</goal>
                       </goals>
                   </execution>
               </executions>
           </plugin>

           <!--
XmlBeans classes generated in wsdl2code need to be included in jar, or will get java.lang.ExceptionInInitializerError
           -->
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-antrun-plugin</artifactId>
               <executions>
                   <execution>
                       <phase>generate-resources</phase>
                       <goals>
                           <goal>run</goal>
                       </goals>
                       <configuration>
                           <tasks>
                               <mkdir dir="${pom.basedir}/target/classes"/>
                               <copy todir="${pom.basedir}/target/classes">
                                   <fileset
dir="${pom.basedir}/target/generated-sources/axis2/wsdl2code/resources/"> <include name="schemaorg_apache_xmlbeans/**"/>
                                   </fileset>
                               </copy>
                           </tasks>
                       </configuration>
                   </execution>
               </executions>
           </plugin>

           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-surefire-plugin</artifactId>
               <configuration>
                   <reportFormat>brief</reportFormat>
                   <useFile>false</useFile>
               </configuration>
           </plugin>
       </plugins>
   </build>

   <repositories>
       <repository>
           <snapshots>
               <enabled>true</enabled>
           </snapshots>
           <id>central-m2-repository</id>
           <name>Central Maven 2 Repository</name>
           <url>http://repo1.maven.org/maven2</url>
       </repository>
   </repositories>
...

--
Gary Weaver
Internet Framework Services
Office of Information Technology
Duke University


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to