jetty+xfire实现的webservice接口(maven普通java工程)

package com.ailk;

import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.nio.SelectChannelConnector;
import org.eclipse.jetty.util.thread.QueuedThreadPool;

public class JettyServer {

    public static void main(String[] args) {
        JettyServer jettyServer = new JettyServer();
        jettyServer.doRun();
    }

    public void doRun() {
        Server server = new Server();
        SelectChannelConnector connector = new SelectChannelConnector();
        connector.setPort(9990);
        connector.setMaxIdleTime(30000);
        connector.setRequestHeaderSize(8192);
        QueuedThreadPool threadPool = new QueuedThreadPool(50);
        threadPool.setName("embed-jetty-http");
        connector.setThreadPool(threadPool);
        server.setConnectors(new Connector[] { connector });
        server.setHandler(JettyServerHandlerFactory.getHandle());

        try {
            server.start();
            server.join();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}
package com.ailk;

//import org.apache.axis.transport.http.AdminServlet;
//import org.apache.axis.transport.http.AxisServlet;
import org.codehaus.xfire.transport.http.XFireConfigurableServlet;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.server.handler.IPAccessHandler;
import org.eclipse.jetty.server.session.SessionHandler;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;

public final class JettyServerHandlerFactory {

    public static Handler getHandle() {
        IPAccessHandler ipAccessHandler = getFireWallHandler();
        ipAccessHandler.setHandler(getServletHandler());

        HandlerCollection handlers = new HandlerCollection();
        handlers.setHandlers(new Handler[] { ipAccessHandler,
                new DefaultHandler() });
        return handlers;
    }
    private static IPAccessHandler getFireWallHandler() {
        IPAccessHandler ipHandler = new IPAccessHandler();
        return ipHandler;
    }
    private static Handler getServletHandler() {
        ServletContextHandler root = new ServletContextHandler(
                ServletContextHandler.SESSIONS);
        root.setSessionHandler(new SessionHandler());
        root.setContextPath("/");
        // root.setResourceBase("./target/classes/axis/");
        // /axis/WEB-INF/server-config.wsdd
        root.setResourceBase("./target/classes/META-INF/xfire/services.xml");
        // XFireServlet
        ServletHolder holder = new ServletHolder(new XFireConfigurableServlet());
        root.addServlet(holder, "/servlet/XFireServlet");
        root.addServlet(holder, "/services/*");
        return root;
    }
}



package com.ailk;

public interface MainService {
    public String getUserInfo(String username);
}

package com.ailk;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MainServiceImpl implements MainService {
    private static final Logger log = LoggerFactory
            .getLogger(MainServiceImpl.class);
    @Override
    public String getUserInfo(String username) {
        log.info("Req:{}", username);
        String rsp = String.valueOf(Math.random());
        log.info("Rsp:{}", rsp);
        return rsp;
    }

}

src/main/resources下

META-INF/xfire/services.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans>   
    <service xmlns="http://xfire.codehaus.org/config/1.0">   
        <name>jettyDemo</name>   
        <namespace>http://www.ailk.com/jettyDemo</namespace>   
        <serviceClass>com.ailk.MainService</serviceClass>   
        <implementationClass>com.ailk.MainServiceImpl</implementationClass>   
    </service>
</beans> 

pom.xml

<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>study-jetty</groupId>
	<artifactId>study-jetty</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<build>
		<sourceDirectory>src/main/java</sourceDirectory>
		<testSourceDirectory>src/test/java</testSourceDirectory>
		<testOutputDirectory>target/test/classes</testOutputDirectory>
		<outputDirectory>target/classes</outputDirectory>
		<testResources>
			<testResource>
				<directory>src/test/resources</directory>
			</testResource>
		</testResources>
	</build>
	<dependencies>
		<dependency>
			<groupId>org.eclipse.jetty</groupId>
			<artifactId>jetty-server</artifactId>
			<version>8.1.14.v20131031</version>
		</dependency>
		<dependency>
			<groupId>org.codehaus.xfire</groupId>
			<artifactId>xfire-all</artifactId>
			<version>1.2.6</version>
  	</dependency>
		<dependency>
			<groupId>org.eclipse.jetty</groupId>
			<artifactId>jetty-servlet</artifactId>
			<version>8.1.14.v20131031</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>1.0.11</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-core</artifactId>
			<version>1.0.11</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.6</version>
		</dependency>
	</dependencies>
</project>


启动server后,浏览器访问:http://127.0.0.1:9990/services/jettyDemo?wsdl


说明:
1.需使用jdk1.6
2.com.ailk.JettyServerHandlerFactory.getServletHandler()中使用XFireConfigurableServlet
可以参照web工程中web.xml的配置


jetty+xfire实现的webservice接口(maven普通java工程),布布扣,bubuko.com

jetty+xfire实现的webservice接口(maven普通java工程)

上一篇:使用C++11新特性,实现用字符串作为switch的case子句


下一篇:java中ExecutorService接口