项目结尾公共模块WebService封装
来源:互联网 发布:淘宝能抢到前500名吗 编辑:程序博客网 时间:2024/05/02 00:19
在杭州出差一年有余,终于结束那个炼狱式的出差生活,心里一个High啊!虽然知道明年还要过去...
年末公司其他项目组看起来都是硕果累累啊,唯独我们项目组的兄弟都很萎,一是项目没有验收,另一个是我们项目做了一年多却不能拿出来给公司领导show一下(这个主要原因是因为我们做的这个项目是几家公司合伙做的,穿插的东西太多,很多有亮点的东西都无法玩儿,尤其是项目中和权限挂钩的模块)。我们老大想了一想把我和熊磊磊喊过去,吩咐道:项目我们也做了一年多了,我希望你们能够把项目中独立起来的模块抽出来包装成WebService,以供后期使用或者给其他兄弟项目组的使用。把你们认为能够独立的列一个清单,然后想想怎么实现。
老大的一番话,我感觉很有道理,我们不光可以温习曾经做过的东西,同事也算是一种学习吧。
谈到WebService我在浙江项目也封装过,不过是使用了WebService框架,需要引入N多东西(这也是我一直比较反感的)。现在我首先想到的是简单,易用。再说,在之前我已经研究过Jax-WS\JAXB,如果使用Jax-WS来做,对我来说也是小case。好了,不扯远了,步入我们的正题吧!
接下来我们逐步来探讨技术吧。
首先,打开Eclipse开发工具,创建一个名为GeoWS的Web Project。新建ICityService.java和IPOIManager.java两个接口,这两个接口分别做“城市定位查询”和“兴趣点查询”。接口都是简单的测试,没有仔细设计。
ICityService.java 代码如下:
package
com.geostar.commonws.city;
import
com.geostar.commonws.city.domain.UserDTO;
public
interface
ICityService {
public
String getCityInfo(String cityName);
public
UserDTO getUserInfo(UserDTO user);
}
其中UserDTO是我测试JAX-WS能不能返回自定义的对象,这个对象我采用jaxb注解对象,其代码如下:
package
com.geostar.commonws.city.domain;
import
javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public
class
UserDTO {
private
String userName;
private
String password;
public
String getUserName() {
return
userName;
}
public
void
setUserName(String userName) {
this
.userName = userName;
}
public
String getPassword() {
return
password;
}
public
void
setPassword(String password) {
this
.password = password;
}
}
IPOIManager.java 代码如下:
package
com.geostar.commonws.city;
import
com.geostar.commonws.city.domain.PoiDTO;
public
interface
IPOIManager {
public
PoiDTO getPOINInfo(String name);
}
其中的PoiDTO与UserDTO类似,也是我测试用的。 代码如下:
package
com.geostar.commonws.city.domain;
import
javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public
class
PoiDTO {
private
String oid;
private
String standardname;
private
long
weight;
private
String addressName;
private
String imageUrl;
public
String getOid() {
return
oid;
}
public
void
setOid(String oid) {
this
.oid = oid;
}
public
String getStandardname() {
return
standardname;
}
public
void
setStandardname(String standardname) {
this
.standardname = standardname;
}
public
long
getWeight() {
return
weight;
}
public
void
setWeight(
long
weight) {
this
.weight = weight;
}
public
String getAddressName() {
return
addressName;
}
public
void
setAddressName(String addressName) {
this
.addressName = addressName;
}
public
String getImageUrl() {
return
imageUrl;
}
public
void
setImageUrl(String imageUrl) {
this
.imageUrl = imageUrl;
}
}
接口已经写好了,接下来便是接口实现类了,接口实现类也是很简单的测试:
package
com.geostar.commonws.city.impl;
import
javax.jws.WebMethod;
import
javax.jws.WebParam;
import
javax.jws.WebService;
import
com.geostar.commonws.city.ICityService;
import
com.geostar.commonws.city.domain.UserDTO;
@WebService
(targetNamespace =
"http://www.geostar.com.cn/geoglobe/"
, serviceName =
"CityService"
, portName =
"CityServicePort"
)
public
class
CityServiceImpl
implements
ICityService{
@WebMethod
(action=
"http://www.geostar.com.cn/geoglobe/CityService/getCityInfo"
, operationName=
"getCityInfo"
)
public
String getCityInfo(
@WebParam
(name=
"cityName"
)String cityName){
return
"浙江"
;
};
@WebMethod
(action=
"http://www.geostar.com.cn/geoglobe/CityService/getUserInfo"
, operationName=
"getUserInfo"
)
public
UserDTO getUserInfo(UserDTO user){
UserDTO u=
new
UserDTO();
u.setPassword(user.getPassword());
u.setUserName(user.getUserName());
return
u;
};
}
package
com.geostar.commonws.city.impl;
import
javax.jws.WebMethod;
import
javax.jws.WebService;
import
com.geostar.commonws.city.IPOIManager;
import
com.geostar.commonws.city.domain.PoiDTO;
@WebService
(targetNamespace =
"http://www.geostar.com.cn/geoglobe/"
, serviceName =
"POIManager"
, portName =
"POIManagerPort"
)
public
class
POIManagerImpl
implements
IPOIManager{
@WebMethod
(action=
"http://www.geostar.com.cn/geoglobe/POIManager/getPOINInfo"
, operationName=
"getPOINInfo"
)
public
PoiDTO getPOINInfo(String name){
PoiDTO poi=
new
PoiDTO();
poi.setOid(
"xxxxxxxxxxxxxxxxxxxx"
);
poi.setAddressName(
"浙江省测绘局"
);
poi.setImageUrl(
"/image/poi/point.gif"
);
poi.setWeight(
10
);
return
poi;
};
}
接口和接口实现类都完了,下面该来写配置文件了,首先来看看jax-ws的配置文件 sun-jaxws.xml(位置在web-inf目录下,下同web.xml)
<?xml version=
"1.0"
encoding=
"UTF-8"
?>
<endpoints xmlns=
"http://java.sun.com/xml/ns/jax-ws/ri/runtime"
version=
"2.0"
>
<endpoint
name=
"POIComponent"
implementation=
"com.geostar.commonws.city.impl.POIManagerImpl"
url-pattern=
"/POIManager"
/>
<endpoint
name=
"CityComponent"
implementation=
"com.geostar.commonws.city.impl.CityServiceImpl"
url-pattern=
"/CityQuery"
/>
</endpoints>
web.xml的配置文件如下:
<?xml version=
"1.0"
encoding=
"UTF-8"
?>
<web-app xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns=
"http://java.sun.com/xml/ns/javaee"
xmlns:web=
"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation=
"http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id=
"WebApp_ID"
version=
"3.0"
>
<listener>
<listener-
class
>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-
class
>
</listener>
<servlet>
<servlet-name>GeoWS</servlet-name>
<servlet-
class
>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-
class
>
<load-on-startup>
1
</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>GeoWS</servlet-name>
<url-pattern>/POIManager</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>GeoWS</servlet-name>
<url-pattern>/CityQuery</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
120
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
ok,整个工程差不多了,接下来便是让这个工程怎么在tomcat下跑起来了,上面的代码如果编译是能通过的,但是如果想运行起来,还需要在tomcat安装目录下的lib文件夹下丢一些jar包,他们是:
jaxb-impl.jar
jaxws-api.jar
jaxws-rt.jar
gmbal-api-only.jar
management-api.jar
stax-ex.jar
streambuffer.jar
policy.jar
这些jar包 你可以在http://jax-ws.java.net/ 这个网站下载的。
ok,我们可以编译运行了。
如果tomcat启动无错,会显示以下信息:
2012
-
1
-
17
13
:
39
:
07
org.apache.catalina.core.AprLifecycleListener init
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: E:\Oracle\Middleware\jdk160_11\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;D:/java/jdk1.
6
.0_03/bin/../jre/bin/client;D:/java/jdk1.
6
.0_03/bin/../jre/bin;D:/java/jdk1.
6
.0_03/bin/../jre/lib/i386;G:\product\
11.1
.
0
\client_1;G:\app\DELL\product\
11.1
.
0
\db_1\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.
0
\;C:\Program Files\WIDCOMM\Bluetooth Software\;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;D:\java\jdk1.
6
.0_03\bin;C:\Program Files\Microsoft SQL Server\
100
\Tools\Binn\;C:\Program Files\Microsoft SQL Server\
100
\DTS\Binn\;E:\GeoGlobe\Server\TASTool\win64\instantclient_11_2;E:\Oracle\Middleware\jdk160_11\bin;C:\Program Files\Common Files\Adobe\AGL;E:\Program Files\Tencent\QQPCMgr\
6.3
.
2078.201
;E:\Program Files\TortoiseSVN\bin;E:\Program Files\Tencent\QQPCMgr\
6.3
.
2078.201
2012
-
1
-
17
13
:
39
:
07
org.apache.tomcat.util.digester.SetPropertiesRule begin
警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property
'source'
to
'org.eclipse.jst.jee.server:GeoWS'
did not find a matching property.
2012
-
1
-
17
13
:
39
:
08
org.apache.coyote.http11.Http11Protocol init
信息: Initializing Coyote HTTP/
1.1
on http-
8080
2012
-
1
-
17
13
:
39
:
08
org.apache.catalina.startup.Catalina load
信息: Initialization processed in
792
ms
2012
-
1
-
17
13
:
39
:
08
org.apache.catalina.core.StandardService start
信息: Starting service Catalina
2012
-
1
-
17
13
:
39
:
08
org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/
6.0
.
29
2012
-
1
-
17
13
:
39
:
08
com.sun.xml.ws.transport.http.servlet.WSServletContextListener contextInitialized
信息: WSSERVLET12: JAX-WS context listener initializing
2012
-
1
-
17
13
:
39
:
09
com.sun.xml.ws.server.MonitorBase createRoot
信息: Metro monitoring rootname successfully set to:
null
2012
-
1
-
17
13
:
39
:
10
com.sun.xml.ws.server.MonitorBase createRoot
信息: Metro monitoring rootname successfully set to:
null
2012
-
1
-
17
13
:
39
:
10
com.sun.xml.ws.transport.http.servlet.WSServletDelegate <init>
信息: WSSERVLET14: JAX-WS servlet initializing
2012
-
1
-
17
13
:
39
:
10
org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/
1.1
on http-
8080
2012
-
1
-
17
13
:
39
:
10
org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /
0.0
.
0.0
:
8009
2012
-
1
-
17
13
:
39
:
10
org.apache.jk.server.JkMain start
信息: Jk running ID=
0
time=
0
/
31
config=
null
2012
-
1
-
17
13
:
39
:
10
org.apache.catalina.startup.Catalina start
信息: Server startup in
2173
ms
2012
-
1
-
17
13
:
40
:
17
org.apache.coyote.http11.Http11Protocol pause
信息: Pausing Coyote HTTP/
1.1
on http-
8080
2012
-
1
-
17
13
:
40
:
18
org.apache.catalina.core.StandardService stop
信息: Stopping service Catalina
那我们可以在浏览器下敲入:http://localhost:8080/GeoWS/POIManager?wsdl 和http://localhost:8080/GeoWS/CityQuery?wsdl 来查看这两个webservice,为了能更好的测试webservice,我们可以下载一个WebService客户端工具,比如我使用SOAPUI来测试,具体这个工具怎么使用,我想聪明的大家三两下能搞定的。测试完毕,我们发现webservice接口可以返回复杂的对象。
今天就写到这里了,如果有什么疑问可以联系我,我的QQ:570777808。
转载请注明出处:http://www.cnblogs.com/likehua/archive/2012/01/17/2324643.html
wsimport生成客户端出现的异常
今天用wsimport命令生成WebService客户端代码总是失败,搞的我很郁闷,错误信息如下:
C:\Users\DELL>wsimport -d com -keep http://10.3.9.86:8080/GeoWS/CityQuery?wsdl
parsing WSDL...
[ERROR] the following naming conflicts occurred: com.geostar.commonws.city.impl.CityServiceImpl
line 1 of http://10.3.9.86:8080/GeoWS/CityQuery?wsdl
我尝试了wsimport的各个参数,最后无语了。于是,我不得不求助谷大姐,有一个解释比较合理
http://www-01.ibm.com/support/docview.wss?uid=swg1PK61939 于是,我将我的Jax-WS注解中的seviceName改了一下,重新发布服务,最后客户端代码生成成功!
- 项目结尾公共模块WebService封装
- mongoose封装管理mongodb的公共模块
- angularjs学习笔记-封装公共模块
- vue开发公共模块封装(http)
- Vue开发公共模块封装(msg)
- shell下的公共模块封装
- ASP项目中的公共翻页模块
- ASP项目中的公共翻页模块
- ASP项目中的公共翻页模块
- ASP项目中的公共翻页模块
- Python学习二:公共日志记录模块封装
- 《权限系列shiro+cas》---封装公共验证模块
- 公共WebService
- 公共Webservice
- maven多模块项目发布webservice
- 一个项目结尾:事务
- 通过Maven的版本管理来管理项目公共模块
- 使用JitPack管理Android项目中公共模块库
- 服务外包:合约形态变革及其理论蕴意—人力资本市场配置与劳务活动企业配置的统一
- 一个硕士是怎么样发5篇SCI的--------谈研究感悟
- 斯坦福大学Stephen P. Bold的凸优化工具包CVX-学习
- Centos 中使用 FTP 命令时出现“-bash: ftp: command not found”
- 构造函数初始化
- 项目结尾公共模块WebService封装
- Mysql导入数据库
- 单例模式使用 Quartz.Net执行定时任务
- 【每天学点算法题10.16】斐波那契数列问题
- 递归计算指定文件夹以及子文件夹大小 - 只记录大于10M的文件夹
- 设计模式——单件模式
- 黑马程序员 ---继承 抽象 接口
- Java基础实验1-猜数字
- 十六进制颜色码