用java进行webservice编程

  • 通过JDK自带API发布webservice
         首先,webservice是通过接口进行发布的
         
package com.nomouse.webservice;

import javax.jws.WebService;

@WebService
public interface HelloWorld {
    String sayHi(String text);
}
         然后是实现
package com.nomouse.webservice;


import javax.jws.WebService;


@WebService(endpointInterface = "com.nomouse.webservice.HelloWorld")
public class HelloWorldImpl implements HelloWorld {


    public String sayHi(String text) {
        System.out.println("sayHi called");
        return "Hello " + text;
    }
}
         最后是发布
package com.nomouse.webservice;

import javax.xml.ws.Endpoint;

public class Test {
	public static void main(String[] args) {
		Endpoint.publish("http://localhost:8080/hello", new HelloWorldImpl());
	}
}

         这样,我们就在这个地址http://localhost:8080/hello 发布了一个webservice,我们通过浏览器访问http://localhost:8080/hello?wsdl,可以获取到一个xml文件,那么webservice发布就成功了。

  • java中调用其他系统发布的webservice
         以我们上面发布的webservice为例,首先我们要获知webservice发布的地址,既上面的http://localhost:8080/hello?wsdl,然后我们用JDK自带的wsimport工具生成webservice客户端代码,在cmd命令行下输入wsimport -keep http://127.0.0.1:8080/hello?wsdl,然后我们可以看到在当前cmd目录下生成一个com目录,把目录连同里边的java文件导入到客户端项目中。
然后我们开始编写客户端代码如下:
package com.nomouse.webservice;

public class Client {
	public static void main(String[] args) {
		
		HelloWorldImplService service = new HelloWorldImplService();
		HelloWorld client = service.getHelloWorldImplPort();
		String result = client.sayHi("nomouse");
		System.out.println(result);
	}
}
        控制台输出:Hello nomouse,说明我们调用成功。
  • 用cxf +spring发布webservice
        用JDK原生方法生成webservice固然简单,但是不好与我们自己的web系统集成,在项目中,我们更多地使用一些成熟的java webservice框架进行webservice发布,在这里我用cxf框架结合spring进行webservice发布,使用maven做项目构建,jetty作为web服务器。
        第一步,用pom文件构建项目结构,项目名为webservice
<?xml version="1.0" encoding="UTF-8"?>
<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>
	<groupId>org.springframework.samples</groupId>
	<artifactId>mvc-basic</artifactId>
	<name>mvc-basic</name>
	<packaging>war</packaging>
	<version>1.0.0-SNAPSHOT</version>
	<properties>
		<org.springframework.version>3.0.5.RELEASE</org.springframework.version>
		<org.slf4j.version>1.6.1</org.slf4j.version>
	</properties>
	<dependencies>

		<!--  Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework.version}</version>
			<exclusions>
				<!-- Exclude Commons Logging in favor of SLF4j -->
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				 </exclusion>
			</exclusions>
		</dependency>

		<!-- Logging -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${org.slf4j.version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${org.slf4j.version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${org.slf4j.version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.16</version>
			<scope>runtime</scope>
		</dependency>

		
		
		<!-- cxf webservice -->
		<dependency>
            		<groupId>org.apache.cxf</groupId>
            		<artifactId>cxf-rt-frontend-jaxws</artifactId>
            		<version>2.6.0</version>
        	</dependency>
        	<dependency>
            		<groupId>org.apache.cxf</groupId>
            		<artifactId>cxf-rt-transports-http</artifactId>
            		<version>2.6.0</version>
        	</dependency>

		<!-- Test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.7</version>
			<scope>test</scope>
		</dependency>


	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.5</source>
					<target>1.5</target>
					<showWarnings>true</showWarnings>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<configuration>
					<warName>webservice</warName>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<executions>
					<execution>
						<id>install</id>
						<phase>install</phase>
						<goals>
							<goal>sources</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			<plugin>
			    <groupId>org.mortbay.jetty</groupId>
			    <artifactId>maven-jetty-plugin</artifactId>
			</plugin>
			
		</plugins>
	</build>
</project>
          第二步,src\main\webapp\WEB-INF下修改web.xml文件,并加入cxf-servlet.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<!-- cxf webservice -->
	 <servlet>
        <servlet-name>cxf</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>cxf</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
</web-app>
         第三步,编写webservice接口和实现,
package com.nomouse.webservice;

import javax.jws.WebService;

@WebService
public interface HelloWorld {
    String sayHi(String text);
}
package com.nomouse.webservice;


import javax.jws.WebService;


@WebService(endpointInterface = "com.nomouse.webservice.HelloWorld")
public class HelloWorldImpl implements HelloWorld {


    public String sayHi(String text) {
        System.out.println("sayHi called");
        return "Hello " + text;
    }
}


第四步,src\main\webapp\WEB-INF下加入cxf-servlet.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
	http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

	<import resource="classpath:META-INF/cxf/cxf.xml" />
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

	<jaxws:endpoint 
	  id="helloWorld" 
	  implementor="com.nomouse.webservice.HelloWorldImpl" 
	  address="/HelloWorld" />
	  
</beans>


第五步,cmd进入项目根目录,cmd命令行输入:jetty:run,启动容器,访问http://localhost:8080/webservice/services,可以看到有一个名为HelloWorld的webservice,表明已发布成功。

 
 
 
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值