当前位置: 代码迷 >> Web前端 >> web service 范例 axis 应用
  详细解决方案

web service 范例 axis 应用

热度:706   发布时间:2012-12-25 16:18:28.0
web service 实例 axis 应用

利用 axis 访问webservice有两种实现方式:

1. parse -> call -> return obj -> extract

2. generate stub by wsdl2java, then uses the stub to access service.

?

下面介绍用第2种方式做一个web project:

1. install myeclipse (myeclipse 5.0 + eclipse 3.2)

2. create a web project named axis

3. create a generator to convert wsdl to stubs

?

package generator;

import java.util.List;

import org.apache.axis.utils.CLArgsParser;
import org.apache.axis.utils.CLOption;
import org.apache.axis.wsdl.WSDL2Java;

public class wsdl2java {
    public static void main(String args[]) {
        args = new String[] { "http://www.deeptraining.com/webservices/weather.asmx?WSDL" };
        new MyWSDL2Java().generateWSDL(args);
    }

    static class MyWSDL2Java extends WSDL2Java {

        public void generateWSDL(String[] args) {
            org.apache.axis.utils.CLArgsParser argsParser = new CLArgsParser(
                    args, org.apache.axis.wsdl.WSDL2Java.options);

            List<CLOption> clOptions = argsParser.getArguments();

            for (int i = 0; i < clOptions.size(); i++) {
                parseOption(clOptions.get(i));
            }
            validateOptions();

            try {
                parser.run(wsdlURI);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

?

run above program, stub will be generted. they are all in the package com.litwinconsulting.webservices

?

4. create business classes

package business;

import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.litwinconsulting.webservices.WeatherLocator;
import com.litwinconsulting.webservices.WeatherSoap;
/**
 * call stub to communicate with weather service.
 * @author tychu
 */
public class WSWeather {

    public String getWeatherByCity(String city) throws ServiceException,
            RemoteException {

        WeatherLocator locator = new WeatherLocator();

        WeatherSoap service = locator.getWeatherSoap12();

        return service.getWeather(city);
    }
}

?
package business;

public class ManagefacedImp implements IManageFaced {
    // invoked to create implementation object.
    public WSWeather getWeatherManage() {
        return new WSWeather();
    }
}

?
package business;

/**
 * all interface of providing services
 * @author tychu
 */
public interface IManageFaced {
    // get weather service 
    public WSWeather getWeatherManage();
}

?

5. create filter and servlet

?

?

package servlet;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.apache.log4j.Logger;
/**
 * uses filter to avoid to specify charset in every servlets
 * @author tychu
 */
public class CharacterFilter implements Filter {
    protected String encoding = null;

    protected FilterConfig filterConfig = null;

    protected boolean ignore = true;

    public void init(FilterConfig fConfig) throws ServletException {
        this.filterConfig = fConfig;
        this.encoding = fConfig.getInitParameter("encoding");
        String value = fConfig.getInitParameter("ignore");
    
        if (value == null || "true".equalsIgnoreCase(value) || "yes".equalsIgnoreCase(value))
            this.ignore = true;
        else
            this.ignore = false;
    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        Logger log = Logger.getLogger(CharacterFilter.class);
    
        if (ignore || (request.getCharacterEncoding() == null)) {
            
            if (encoding != null) {
                request.setCharacterEncoding(encoding);
                log.info("filter used!!!");
            }
        }
        response.setContentType("text/html; charset=" + encoding);
        chain.doFilter(request, response);
    }

    public void destroy() {
        // do nothing
    }
}


?
package servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.rpc.ServiceException;

import org.apache.log4j.Logger;

import business.ManagefacedImp;
import business.WSWeather;

/**
 * servlet invokes bussiness interface 
 * @author tychu
 */
public class InvokeWS extends HttpServlet {
    private static final long serialVersionUID = 1646431374969L;

    Logger logger = Logger.getLogger(InvokeWS.class.getName());

    public void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        // PropertyConfigurator.configure("log4j.properties");

        WSWeather wsw = new ManagefacedImp().getWeatherManage();
        PrintWriter pw = resp.getWriter();
        String city = req.getParameter("city");

        // if no filter set, you will get some unrecognized characters here
        // logger.info("city:" + city);

        if (city != null && city.length() != 0) {
            String weatherinfo;
            try {
                weatherinfo = wsw.getWeatherByCity(city);
                pw.println("<font size='2' color='blue'>" + weatherinfo
                        + "</font><br>");
            } catch (ServiceException e) {
                e.printStackTrace();
            }

        } else {
            pw.println("<font size='2' color='blue'>"
                    + "the specified city not exists, please contact:********" + "</font><br>");
        }
    }

    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doGet(req, resp);
    }
}

?

6. add servlet and filter to web.xml

?

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <filter>
        <filter-name>SetCharacterEncodingFilter</filter-name>
        <filter-class>
            servlet.CharacterFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>GBK</param-value>
        </init-param>
        <init-param>
            <param-name>ignore</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>SetCharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <servlet>
        <servlet-name>InvokeWS</servlet-name>
        <servlet-class>servlet.InvokeWS</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>InvokeWS</servlet-name>
        <url-pattern>/invoke</url-pattern>
    </servlet-mapping>
</web-app>

?

7. web pages

?

index.htm

<html>
    <head>
        <title>WebService weather</title>
    </head>
    <frameset rows="5%,*%" Borders="No" border="0">
        <frame src="top.htm" noresize="false" name="top" frameborder="0">
        <frame src="bottom.htm" noresize="true" name="bottom" frameborder="0">
    </frameset>
</html>

?
top.htm

<html>
    <head>
        <title>weather</title>
        <meta http-equiv="content-type" content="text/html; charset=gb2312">
    </head>

    <body>
        <form name="form1" method="post" action="invoke" target="bottom">
            <input type="text" name="city" id="city">
            <input type="submit" name="sub" value="GO">
        </form>
    </body>
</html>

?
bottom.htm

<head>
    <title>weather</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <style type="text/css"/>  
</head>

?

8. deploy and run

?

at location: http://localhost:8080/axis/ ?and input any thing, you can get a result returned from servers.

?

  相关解决方案