6.3. simple-weather 模块

我们要看的第一个子模块是simple-weather子模块。这个子模块包含了所有用来与Yahoo! weather信息源交互的类。

Example 6.2. simple-weather 模块的 POM

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.sonatype.mavenbook.ch06</groupId>
    <artifactId>simple-parent</artifactId>
    <version>1.0</version>
  </parent>
  <artifactId>simple-weather</artifactId>
  <packaging>jar</packaging>

  <name>Chapter 6 Simple Weather API</name>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <configuration>
            <testFailureIgnore>true</testFailureIgnore>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement> 
  </build>

  <dependencies>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.14</version>
    </dependency>
    <dependency>
      <groupId>dom4j</groupId>
      <artifactId>dom4j</artifactId>
      <version>1.6.1</version>
    </dependency>
    <dependency>
      <groupId>jaxen</groupId>
      <artifactId>jaxen</artifactId>
      <version>1.1.1</version>
    </dependency>
    <dependency>
      <groupId>velocity</groupId>
      <artifactId>velocity</artifactId>
      <version>1.5</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-io</artifactId>
      <version>1.3.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

simple-weatherpom.xml文件中我们看到该模块使用一组Maven坐标引用了一个父POM。simple-weather的父POM通过一个值为org.sonatype.mavenbookgroupId,一个值为simple-parentartifactId,以及一个值为1.0version来定义。注意子模块中我们不再需要重新定义groupId和version,它们都从父项目继承了。

Example 6.3. WeatherService 类

package org.sonatype.mavenbook.weather;

import java.io.InputStream;

public class WeatherService {

    public WeatherService() {}

    public String retrieveForecast( String zip ) throws Exception {
        // Retrieve Data
        InputStream dataIn = new YahooRetriever().retrieve( zip );

        // Parse Data
        Weather weather = new YahooParser().parse( dataIn );

        // Format (Print) Data
        return new WeatherFormatter().format( weather );
    }
}

WeatherService类在src/main/java/org/sonatype/mavenbook/weather中定义,它简单的调用???中定义的三个对象。在本章的样例中,我们正创建一个单独的项目,它包含了将会在web应用项目中被引用的service对象。这是一个在企业级Java开发中常见的模型,通常一个复杂的应用包含了不止一个的简单web应用。你可能拥有一个企业应用,它包含了多个web应用,以及一些命令行应用。通常你会想要重构那些通用的逻辑至一个service类,以被很多项目重用。这就是我们创建WeatherService类的理由,在此之后,你就能看到simple-webapp项目是如何引用在simple-weather中定义的service对象。

retrieveForecast()方法接受一个包含邮政编码的String。之后这个邮政编码参数被传给YahooRetrieverretrieve()方法,后者从Yahoo! Weather获取XML。从YahooRetriever返回的XML被传给YahooParserparse()方法,后者继而又返回一个Weather对象。之后这个Weather对象被WeatherFormatter格式化成一个像样的String