a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 215|回复: 3

[其他] JAVA技巧:小小试Hessian实现webservice

[复制链接]
发表于 2012-8-4 12:28:23 | 显示全部楼层 |阅读模式
小试Hessian实现webservice! R/ J3 _  `; n9 N
Hessian是一个轻量级的remoting on http工具,采用的是Binary RPC和谈,所以它很适合于发送二进制数据,同时又具有防火墙穿透能力。Hessian一般是经由过程Web应用来供给处事,是以很是近似于日常平常我们用的WebService。只是它不使用SOAP和谈,但对比webservice而言更简单、快捷。
  m4 N( q4 t- Q7 o! |- i' P7 `Hessian官网:http://hessian.caucho.com/
# V3 V- }2 A& Y/ V/ bHessian可经由过程Servlet供给远程处事,需要将匹配某个模式的请求映射到Hessian处事。也可Spring框架整合,经由过程它的DispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian处事。Hessian的server端供给一个servlet基类, 用来措置发送的请求,而Hessian的这个远程过程挪用,完全使用动态代办代糊弄实现的,,建议采用面向接口编程,Hessian处事经由过程接口吐露。! U2 [3 f2 {- `$ n2 n9 j. p
Hessian措置过程示意图:& G' m9 B' g, |! j
客户端——》序列化写到输出流——》远程体例(处事器端)——》序列化写到输出流 ——》客户端篡夺输入流——》输出结不美观
1 W+ I. @3 G. {2 T6 o2 f2 n下面具体介绍最常用的两种体例实现Hessian供给webservice:; t% f6 a7 E8 f4 h% c, C
纯Hessian实现
' s. z% Z; ]" Y: z/ c- e配合Spring框架实现* f9 {# W. d4 I7 s) O4 e, J
在起头之前当然需要到官网上下载相关的lib包,放入项目的/WEB-INF/lib/下; ], X6 f- h3 e/ q
【一】、纯Hessian实现轨范:! s1 n' A" B9 S  i' P
1.根基代码" b0 p* ]( ~5 @9 @
首先编写一个处事的接口类:HelloHessian.java$ t( ~( w! W$ e- j7 h
Java代码
9 ?! ^/ G) O4 T9 v3 {( \package michael.hessian;
4 l( P$ j) g1 `$ E1 N# zimport java.util.List;
! q8 ]2 D4 J5 Q5 _$ P( e; ximport java.util.Map;
, f( L+ i  y/ e+ i  [: q1 A/**
$ D) x  _* e, E+ u* @author michael
; V: h$ |: X0 T+ m* g5 U6 }: p5 o*3 T8 Z# y2 b! a
*/
% `9 A. e) Q3 `9 ^2 Hpublic interface HelloHessian {
6 `! {( r% K8 c* u1 HString sayHello();
4 M5 w, `4 I; X9 |MyCar getMyCar();
2 ^7 T- {# W% e2 CList《String》 myLoveFruit();# x, s. m+ F* E( I# F1 ~
Map《String, String》 myBabays();1 X, W7 w! C- V2 C! L
}4 k) W, `' J- A3 v7 d8 D% G$ v
package michael.hessian;
+ R: I) Y9 ?7 u/ @" G; _. Gimport java.util.List;
" q" A: q0 {2 Q* w! n& P8 I" ~import java.util.Map;: b: ~; K) p6 P; }* E
/**. \9 U* W8 v& r7 L; q
* @author michael
& a6 ]7 u$ d; n! |8 M$ l*$ }% p  a' U3 b! l5 k( v
*/
5 X$ e4 A+ r! b* o0 Fpublic interface HelloHessian {
0 z) K3 {  W+ _. P4 l& Y8 a4 aString sayHello();; w$ V5 G% m9 I& F: `2 k) m* c
MyCar getMyCar();2 z5 {- O! Q! J- Y& N
List《String》 myLoveFruit();
, ?# S" ?) Q( Y. ~Map《String, String》 myBabays();
- ^; C( ]) M" C}
) N+ G( c& n( d4 Q9 `4 F) {一个java bean文件MyCar.java:
0 X1 i$ F  a5 b  p9 N1 ]" S5 YJava代码- k+ P. Z# P" e
package michael.hessian;
5 Z; t/ T- m9 X* t# Yimport java.io.Serializable;: V7 T/ p+ ~/ @1 `9 `0 [2 u/ U- ?

+ x3 [% ?- g9 m9 i% \$ R/ ?/ t0 B' L; l* |, L5 L+ P
/**
  h! d8 c9 k) F* @author michael
2 b* R' D* M( D3 X*
3 l/ K/ T: U& p; L0 l7 ?*/
, B# T4 r( F3 E: }+ t/ Y! Spublic class MyCar implements Serializable {0 |9 i3 ?2 I+ @2 F0 f2 d0 e$ S; Z  h
/**
5 f6 c5 P! K  t7 k*
+ Y6 T+ x9 [1 {2 z5 p/ d$ E; W2 o" r*/  \$ ?" H) G/ Q' s& q1 W0 y, {, g
private static final long serialVersionUID = 4736905401908455439L;
0 \9 Q& ?2 i  d7 Oprivate String carName;
  |3 ]( g9 ~% k% v; E  I) m, tprivate String carmodel;
# c( E/ {( |) d6 o' T7 H8 p2 C6 Q/**
5 h+ ^7 J& V7 F  C* @return the carName
; q2 ]; q/ n5 x" J2 B) ^*/
3 f6 z) L8 K# {: E' wpublic String getCarName() {
& ?$ @2 @& U" Z6 p+ wreturn carName;
. E  U+ f6 i- E8 h# F/ X+ b}
0 M1 V) K9 r. P; K5 ]7 l* x+ L" Q/**
8 Z: e  B3 L! X4 ?8 J* @return the carmodel$ z' ]+ j, N* g1 V; S1 l
*/
4 R# V2 Q5 S- R% X4 @, z. jpublic String getCarmodel() {( D! G) s% x8 b0 `( a/ t
return carmodel;% _, J) T/ P# X0 z5 u& R/ T  ^; a
}
0 n. {  l! K( e4 t' Y" Q+ i/**
2 p/ L! I* q7 x) g# \9 \, a6 U* @param pCarName the carName to set
/ R4 _3 \; z: M. k+ C& |9 {*/1 E' y" a0 j( l$ Z% W5 b# Y
public void setCarName(String pCarName) {
7 D2 M7 T) X$ J/ McarName = pCarName;
. F$ k, e) X- s9 d# r}7 @$ }+ I! f0 i4 ^
/**
) y5 @( A( K* B( ]7 z* @param pCarModel the carmodel to set
: e- f5 L0 `& T; I# v*/  I2 j1 l7 r( G  K9 f9 V
public void setCarModel(String pCarmodel) {+ I# {& `7 ?% H4 T( {
carModel = pCarmodel;
5 w/ ~2 ]5 @( r0 K}; u4 x* y/ g/ |
/**( }) b6 S9 x9 h4 s  E0 K" x, O
* @see java.lang.Object#toString()
. e7 ~! h  q6 T: ?% s* @return
% [* s0 j3 s$ }0 E, E7 ~*/
; j) G& ^* Q( z, `; J) c" @$ {0 H@Override
# K7 {: r4 n0 [+ }. ^% U/ p8 F, lpublic String toString() {
5 n5 S( N- c2 o2 X8 X) K8 f* o4 }" ^return “my car name:[” + this.carName + “] model:[” + this.carmodel( \  W7 v+ i9 R/ e
+ “]。”;
6 P8 |! I7 e: i* W1 ]' L; ~* r/ y4 H% l' u9 _/ G9 W. J, x/ v
}
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:28:24 | 显示全部楼层

JAVA技巧:小小试Hessian实现webservice

</p>}, q) N  w8 B/ v6 L
package michael.hessian;3 \" O( ?. k6 k, r8 F
import java.io.Serializable;8 g8 h* r& f& p$ Q) ~
/**) _9 z& S1 [+ I: r' e
* @author michael6 S% E  s* V' P  \5 {+ G
*
* u3 C3 L% R6 M$ A& v% [*/
7 x5 ?2 b* l# b8 u& Q4 k, U8 ypublic class MyCar implements Serializable {, ]  {* `' {7 k, n0 Y1 L
/**1 e6 O4 m$ |* y- F+ v# Z6 L6 A0 c
*) F* c) G' S7 B8 H: v* f8 m
*/
4 N5 L+ M1 o' W  G& M, h. B; W9 Kprivate static final long serialVersionUID = 4736905401908455439L;" D9 a9 Y1 f4 j4 u+ s
private String carName;+ w: ]! M3 s3 O+ F' }9 j5 K: d
private String carmodel;
3 b8 V: Y) C5 J/**
5 M* w- S; _- ^& i5 F  a2 u1 G* @return the carName
! G4 N" s& u7 z" c6 O" D8 v) v*/
6 k2 u3 k4 R! j" upublic String getCarName() {  ^. _% ]0 s0 i  P
return carName;
& y6 F; q% b2 H}7 n! ~+ m5 L( X0 c1 ]
/**, X& n3 Y* ^! C1 s4 ]' |* d
* @return the carmodel
" m, U0 N# \* P- G*/+ o; G/ o1 E  P+ ~, A, Y
public String getCarmodel() {
3 m! M  `! R8 `6 n: Sreturn carmodel;; d" t9 Y2 n) W( W  @: ]$ A
}
3 o7 D7 X6 ?6 f2 K) K/**. T" \0 R$ _2 R  R
* @param pCarName the carName to set; q; k0 c  z2 N
*/
6 |1 V& H6 l# b* _/ Xpublic void setCarName(String pCarName) {, O3 Z! m" A& |' x. ]/ |
carName = pCarName;" \( A# F/ E- @: H8 D
}, m- ?+ z. B6 I
/**
' G0 M7 }# e, M3 e* @param pCarModel the carmodel to set4 \; S" _# H& U1 a0 X/ N
*/
8 V/ k  m) L5 T' ypublic void setCarModel(String pCarmodel) {
# S/ U5 @, }  u! W5 ecarModel = pCarmodel;) `) g  Y7 A4 i* U- y+ j7 z& t
}
$ i6 n, i2 G& B9 Q! q) J/**/ `6 L4 I$ a( [7 V- F3 Y) H& }
* @see java.lang.Object#toString()
$ x, f' r' j- O. p0 W; v* @return2 R8 t) W  l' a2 Y; a# R2 i8 L
*/
% @+ Z9 z! a5 @- y@Override( X3 [1 H2 ^/ Z+ b! a
public String toString() {
9 C$ c' i% V9 S& u7 |- {' yreturn “my car name:[” + this.carName + “] model:[” + this.carmodel
9 |5 ]0 {! `* _5 k+ “]。”;% x, t2 [; \8 B" I3 u/ X$ v
}
$ z$ r) I9 R  e- i0 ]}
; U! Y* n6 m( i1 \4 v' J6 F$ {处事端接口的实现类:HelloHessianImpl.java
) O$ x: g# H- U3 E5 l' o; h! }Java代码
7 I4 W6 L' j  K! n" q2 G2 U+ E0 ]package michael.hessian.impl;
3 z: x' E, Q# @8 H/ E2 G4 V9 D& dimport java.util.ArrayList;: c3 e4 p! ^6 R0 y+ W% K7 q" Y8 A
import java.util.HashMap;" p' |) I+ X: g6 D
import java.util.List;) }" d+ Q* q& t/ x" ~' y
import java.util.Map;
! T5 o) Q0 @4 a& kimport michael.hessian.HelloHessian;
) C* i! N0 g1 d7 Cimport michael.hessian.MyCar;- E. H  X0 Y# ]8 _
/**$ u( d( @: b& `: k& S
* @author michael4 H. D5 n9 S7 f' E& C# v3 X
*
+ k/ r/ M$ g0 P! g*/" Q) A' u# I" m; t
public class HelloHessianImpl extends HessianServlet implements HelloHessian {: [( s1 C, j: B3 F, a- c
public MyCar getMyCar() {) F# P0 T, S6 E! d. v
MyCar car = new MyCar();
; R& t' G  A- s- g2 M1 T3 wcar.setCarName(“阿斯顿·马丁”);
& `) F( b) v$ w% P% v9 H6 @& t2 l; dcar.setCarmodel(“One-77”);1 C( V+ `. i) l! B) [, C2 a
return car;
2 L$ Q" @  T- q' S7 d* I}
8 @6 R2 E1 W5 x8 Gpublic Map《String, String》 myBabays() {$ X8 C$ h' p% E2 h
Map《String, String》 map = new HashMap《String, String》();
, l* C1 p7 J4 J$ cmap.put(“son”, “孙吴空”);3 @2 i' S/ c- J+ ]9 c' N, F; E
map.put(“daughter”, “孙小美”);' V7 M) h: K1 d9 u% {+ ^
return map;# l# H+ O. G/ Z3 y5 g7 j
}% S) [3 C$ \* G. |
public List《String》 myLoveFruit() {
( ^' Z) r5 v3 rList《String》 list = new ArrayList《String》();3 b3 Q7 U, }: d: f; \
list.add(“apple”);" e4 t) J& V) j
list.add(“kiwi”);& O$ U% H1 {9 o) [% B$ f1 j! M7 D
list.add(“orange”);9 W% V8 x  h# ?& [  p
return list;
, j; H5 p$ c$ V}8 {# J+ G/ A% K; D2 z& |% i4 ?
public String sayHello() {
: W4 i! d0 C$ v5 xreturn “welcom to Hessian”;4 E/ E$ D+ Z8 E" z! A* N
}
7 r; m/ I) _9 d$ H' j}* _3 M  D  F6 M+ ]
6 D& i6 h& j4 O6 U  g

% R5 V1 E! [% V0 F9 M6 F; q3 g" mpackage michael.hessian.impl;
: `6 J0 `$ Q5 {+ c$ s# G) yimport java.util.ArrayList;+ _* p' g: d( t7 o6 {( F) z1 h0 {" V
import java.util.HashMap;
. @- O6 c& T7 w' a( \, u8 P+ R# A* c- Zimport java.util.List;. b' n8 L+ n8 w, l9 |8 I9 F
import java.util.Map;% q. ]" j. M9 ?/ H% @- X
import michael.hessian.HelloHessian;
. Q% m  ?; M- p6 Z2 Eimport michael.hessian.MyCar;- t, a7 a( m* e
/**( [& b3 }5 }" A7 r% `
* @author michael/ d8 m) @- i  _" g1 Y* I
*; ]; i4 v& c& J
*/
* L6 U* m3 u9 G" y: y2 Y+ k0 gpublic class HelloHessianImpl extends HessianServlet implements HelloHessian {
5 q' u( e" e0 B& ?, [" D0 |public MyCar getMyCar() {
1 l, [& `) S: f$ \; ~! PMyCar car = new MyCar();
" }8 D# t) k5 |- W' E& O% h3 |car.setCarName(“阿斯顿·马丁”);" I6 s* L: W5 `7 Y: d
car.setCarmodel(“One-77”);
% S6 P# e  `  w0 c7 l0 g; L+ ^return car;, d* D0 {9 \$ i- _2 ~! d$ i6 K
}( t7 V+ o& w0 _& N3 f9 Z: q
public Map《String, String》 myBabays() {7 L' l' ~# v  j9 d
Map《String, String》 map = new HashMap《String, String》();, _4 T6 t: Q8 [" e9 v- S; S
map.put(“son”, “孙吴空”);6 q$ |7 ?$ X& _
map.put(“daughter”, “孙小美”);
1 |) F! |* E$ l$ Oreturn map;- y/ O# L# b# i: V/ j# }
}; K7 ?" ~" g: x6 m& c5 |
public List《String》 myLoveFruit() {' `' D2 E2 N" G5 A$ S4 K
List《String》 list = new ArrayList《String》();
: L. p' g5 h5 Q1 L) Llist.add(“apple”);( W( F# n8 C) h8 @% j
list.add(“kiwi”);
  y$ @, b  ~* Klist.add(“orange”);: _* w; V, e/ r" m' U. s
return list;  C: J1 s! q3 B
}
! E1 F) b! X6 E+ S) ipublic String sayHello() {& H. x7 Y: q1 o# ]* e
return “welcom to Hessian”;
7 w/ r& B( Y+ P* W% r( |( c) X) e" w+ d$ c}( D9 M% M% R/ o% f
}7 x5 n- v6 @! z
2.设置装备摆设文件web.xml改削
9 {7 Y* F) \! r) I! V+ Z- S在web.xml设置装备摆设文件里增添如下信息:
# t  x, c- V1 r! L; ]+ kXml代码
; b3 ^& _5 Z$ o" ^2 K# e& \《servlet》
8 e# k6 A- f$ ~! L《servlet-name》HelloHessian《/servlet-name》
- V( X+ P2 N/ Y) G- [" E《servlet-class》+ p1 \6 q6 P' i$ v* \) G
com.caucho.hessian.server.HessianServlet
: z4 O* _2 w) l  ~/ L: L: C《/servlet-class》/ W2 e# M" d: W0 H& j0 r8 h
《init-param》( G/ X0 M' C" |, e
《param-name》home-class《/param-name》/ s$ ?) a* a9 a) i/ b' \
《param-value》michael.hessian.impl.HelloHessianImpl《/param-value》
" Y; a4 o, \& t6 i! j7 o: a# e《/init-param》; z5 O* F5 r- }( D0 s: R# X
《init-param》
* M! c. l. k4 Q8 ]  \/ u《param-name》home-api《/param-name》
0 X7 e6 x1 N, _. d1 c' Y1 C《param-value》michael.hessian.HelloHessian《/param-value》
8 A) ^$ _+ O4 |3 C5 m/ v) h! E《/init-param》
0 m$ m0 S$ A% l" ?$ S《load-on-startup》1《/load-on-startup》5 [7 i6 Z# L$ a, C
《/servlet》
9 G9 D, N& z% ^, x《servlet-mapping》, ~0 [# @4 T- C! o( f
《servlet-name》HelloHessian《/servlet-name》
3 T" z4 u- F4 x: @《url-pattern》/HessianService《/url-pattern》8 m+ J5 X( |8 t6 M
《/servlet-mapping》
7 o5 ^! u- [$ \) b9 X《servlet-mapping》
9 o4 @4 x. y* K( |0 P《servlet》: h) Y% v* M' \8 c. [3 \
《servlet-name》HelloHessian《/servlet-name》  I; U6 A2 _$ q; A: m1 L0 x! ~
《servlet-class》9 |, m& P. K' n$ N3 a
com.caucho.hessian.server.HessianServlet( e0 L' l& X9 B0 E$ s
《/servlet-class》
5 M2 m: e$ C: Q/ Z% b0 ^/ N《init-param》% c: `) ^! _/ B) f
《param-name》home-class《/param-name》- w3 S+ @# y5 Q! D
《param-value》michael.hessian.impl.HelloHessianImpl《/param-value》
/ D, e  v7 q; R《/init-param》
* l4 ]- k% K% T& f- L8 A- |《init-param》
6 @; M2 V/ Y7 |( U4 |: U. z+ \《param-name》home-api《/param-name》0 ^+ `$ m; ~" m. B. x# |% u
《param-value》michael.hessian.HelloHessian《/param-value》
& M  P( N! p! ^  ^" }& t《/init-param》1 {6 Z8 y- I# ~- o5 [" p
《load-on-startup》1《/load-on-startup》1 ~/ {7 k, H8 r& B7 G) D: B
《/servlet》
* `- l9 X# b4 L" A0 g《servlet-mapping》
3 C3 x: E2 T+ f3 ]《servlet-name》HelloHessian《/servlet-name》! q0 g" a- g& _1 r
《url-pattern》/HessianService《/url-pattern》
, P1 _6 n% c3 W" p《/servlet-mapping》: d; o* ?' e8 P* y  m9 S
《servlet-mapping》- s5 T, O( ]: d8 R2 n
3.java客户端验证
1 q( W6 Z3 h2 G8 iJava代码
2 z+ ~+ G. X4 A5 D2 c8 npackage michael.hessian.client;
- g( A- o- f% a% P2 B  rimport java.net.MalformedURLException;
! a' R" B0 X) G9 s8 o+ t4 b$ timport java.util.Map;
) I: `0 x" t' z' w, X4 h6 o' ximport michael.hessian.HelloHessian;: X( g; \+ d% X* K; }, ]6 o: n' t
import michael.hessian.MyCar;
: g7 L  Z# [+ l; N2 g8 J: pimport com.caucho.hessian.client.HessianProxyFactory;: _  X$ b8 r- @/ i
/**  \/ g9 x  |1 c# ^) ?) N
* @author michael1 V# e( S. l' o: d/ b, D" }
*
$ l3 I# S; s$ k$ S*/6 W/ V5 J1 y$ f# e
public class HessianClientTest {
$ ^; x, [8 K8 r( V  C/**
7 X8 w( Q& a  d$ T  a' E* @param args3 {! ~5 F/ I  u
*/7 q0 [1 R. G9 K1 I
public static void main(String[] args) {
! I1 _! E7 D: n* M- IString url = “http://localhost:8082/J2EE_sjsky/HessianService”;+ g! k/ `  N# ~6 Y8 E5 u* a
HessianProxyFactory factory = new HessianProxyFactory();3 p3 N  q, j# ~  R  U( e9 k
try {
8 N# {* _6 j# z9 P0 [: E* nHelloHessian hello = (HelloHessian) factory.create(  v+ t: ?9 ~4 I  o
HelloHessian.class, url);
# H1 ~4 B) L3 t/ o% oSystem.out.println(hello.sayHello());
0 @( n: U/ m/ w, Y: a, R1 X1 F/ ZMyCar car = hello.getMyCar();& I3 n# \" c" V) O5 r. \. U
System.out.println(car.toString());0 e7 s; v) \/ _& b  j
for (Map.Entry《String, String》 entry : hello.myBabays().entrySet()) {5 w! H, [2 i( r
System.out.println(entry.getKey() + “ ” + entry.getValue());( u8 b: O  R2 U( m/ U+ F0 L
}
$ K9 j8 x$ K) ^. q: k  ifor (String str : hello.myLoveFruit()) {
+ n2 L3 n& u3 nSystem.out.println(str);
! d9 `: f; E5 ]4 M. g3 d- \}+ [% K' k* J" N: g
} catch (MalformedURLException e) {
4 z$ b" r( T: z# c1 s) s/ w4 \e.printStackTrace();
, C  j7 R* [0 O1 e) r+ ~9 ~}: n1 o" E& B: b' d4 L) |( d/ Q2 X
}
- o' {  p% F# d1 E# C1 ^+ w}
& A8 |1 e+ X. e& B/ Kpackage michael.hessian.client;
) T# o( B/ @6 h% V/ P0 z% C% Uimport java.net.MalformedURLException;1 T, c7 |. ^) s: f# X
import java.util.Map;6 i8 z7 l# P9 Q$ n
import michael.hessian.HelloHessian;9 N3 U9 W& n' W$ G8 o2 }# p
import michael.hessian.MyCar;" c& z  d+ g' @$ V7 b2 f
import com.caucho.hessian.client.HessianProxyFactory;( A+ |; ?, U. `: L2 {
/**
4 P7 h- x4 E1 K3 V* @author michael1 S2 f# ~! L1 O+ C
*7 J# d5 _4 y" I2 n+ B" I
*/
8 _% R! w$ w5 U$ u& C+ kpublic class HessianClientTest {
' O3 |% s2 p* T+ L/**
: J2 g0 @2 H6 |* I, ?* n* @param args0 L/ |/ U. z/ z5 h! o$ W
*/( W2 j5 z  v9 F* \3 |' a2 M8 N
public static void main(String[] args) {
. i: P" e  v0 ]8 _) UString url = “http://localhost:8082/J2EE_sjsky/HessianService”;
6 v  o0 o5 |! T! }8 _9 G% fHessianProxyFactory factory = new HessianProxyFactory();+ w2 h& K* {5 o. T6 ]7 d
try {
, D+ c/ ~/ x$ i7 v% sHelloHessian hello = (HelloHessian) factory.create(
8 h. X% g- F7 C7 B: qHelloHessian.class, url);) g0 L3 f+ w* |* C
System.out.println(hello.sayHello());
+ w4 c6 v7 V, R  d0 BMyCar car = hello.getMyCar();
1 z" A0 l: O$ k6 @9 gSystem.out.println(car.toString());
( z! A' z9 s! H( l: Dfor (Map.Entry《String, String》 entry : hello.myBabays().entrySet()) {: f% T2 y) ^3 l1 T) R+ u
System.out.println(entry.getKey() + “ ” + entry.getValue());7 l+ [2 X, h0 Z
}1 c- ~0 X6 ~! t; |" K# j
for (String str : hello.myLoveFruit()) {
) A) x. x. o0 A% G+ _3 Q9 nSystem.out.println(str);7 w; v; u0 E/ V% o
}: Y8 ]% g1 y  m
} catch (MalformedURLException e) {- A2 f, K3 F' p- u' }3 f
e.printStackTrace();
; o/ @2 F8 T* \7 y4 ^# A}
. N" S: D, p$ n# e7 J}- Y" }' v+ ]- R# f. C6 r3 U. [: o
) l5 M: R) w; R7 {# P2 m! U
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 12:28:25 | 显示全部楼层

JAVA技巧:小小试Hessian实现webservice

</p>运行结不美观如下:
* x# j& I3 _( D; |% {  Z
: _7 p/ F, j3 t5 r
- U9 S" D7 C8 R5 a% B! s6 UJava代码( }5 A+ g; C) K
welcom to Hessian
$ Y, E9 }, u+ ?+ Emy car name:[阿斯顿·马丁] model:[One-77]。' @5 x1 W2 b  V3 E/ h
daughter 孙小美
7 w" M* C0 C: z4 y" Pson 孙吴空
. w) h6 }  G0 Iapple# H7 Y3 ^5 S$ n
kiwi: Z- z1 X, L) o3 H3 Z2 R
orange
1 @1 w. V! w, _* Y3 Zwelcom to Hessian& ]1 D' n, v0 ?$ i* f
my car name:[阿斯顿·马丁] model:[One-77]。
% A0 Q  ~$ T( h, Xdaughter 孙小美
. [0 r' k% t. W  G& kson 孙吴空+ P8 J  R- b% ^. ]% G6 T
apple( g  P* d7 s# w' J3 x% ^
kiwi. r* R! }. V+ G) J* f/ A
orange  J! P1 o2 l9 J9 y8 a* b+ m' F
【二】、spring+hessian 实现处事端:) S' ?* a8 z- s* ]1 }
1.根基代码见膳缦沔的demo
% p1 G  O; u$ Y2 N9 c( n, r+ J2.改削设置装备摆设文件8 |) U; B, A6 ^- ?$ X4 d
在web.xml,增添内容如下:2 z8 @% v' F0 v+ F7 O: _) c# _- H* x
Xml代码
: `$ S" h: [3 h7 D5 Z9 a《servlet》; m* S; X6 m, M2 r7 K" |
《servlet-name》springhessian《/servlet-name》- Q* t6 u! O. b# ~- [
《servlet-class》% I2 b9 _$ S3 R2 O9 f8 T4 w
org.springframework.web.servlet.DispatcherServlet
: M$ C  c/ M+ N. Y《/servlet-class》
" c- R% h) T; W# C. a《!--
0 D1 F0 H/ \& ^3 ]$ @: |《init-param》
7 b0 ^, c  Q: @# Q+ w《param-name》contextConfigLocation《/param-name》0 u8 l/ g# I" b: Y
《param-value》/WEB-INF/springhessian-servlet.xml《/param-value》
1 ~. y- K. R, u7 d7 I《/init-param》
7 _( ]6 v' L: a1 S5 d--》
: h" y$ Z# {2 X* p9 y2 l$ K《load-on-startup》1《/load-on-startup》8 W! z, U2 T% f: A! ^
《/servlet》: P! C4 _6 c/ c/ e, e5 j4 t
《servlet-mapping》1 X4 v1 _& Q% U7 X3 ~0 Y( `/ W
《servlet-name》springhessian《/servlet-name》0 [) _1 _+ c8 ^
《url-pattern》/springhessian/*《/url-pattern》
# x% |$ r6 N4 U0 n( t《/servlet-mapping》. O% {' g7 B% g, Q5 ~
《servlet》; ~" x, Z+ ~7 o) ?5 y
《servlet-name》springhessian《/servlet-name》2 ^- s0 {; _5 M/ S) W* d, M
《servlet-class》! g  k4 H) B7 S4 g5 q
org.springframework.web.servlet.DispatcherServlet
) Q1 @) e' X, {' Z) d% a0 j《/servlet-class》
8 N$ [& [4 g& F/ M: G《!--; E7 S( T( ^6 s6 ~, l+ p2 A
《init-param》
. U5 i! _1 \  X) g《param-name》contextConfigLocation《/param-name》
6 m  X7 y( _; i3 H《param-value》/WEB-INF/springhessian-servlet.xml《/param-value》, O8 r3 \; ]5 R5 G: c: [; s" M) l
《/init-param》( A; M" h# Q8 C3 q  Z
--》  x- j) U# F8 C+ @1 \
《load-on-startup》1《/load-on-startup》
2 z* |  H3 i# {: {《/servlet》+ p4 G; o6 E2 y3 k7 ?: x
《servlet-mapping》
/ c# }- M8 j  b, B. k《servlet-name》springhessian《/servlet-name》
5 _2 K8 g! U) i1 S《url-pattern》/springhessian/*《/url-pattern》
. u4 d8 D  s/ b0 Z. @- q《/servlet-mapping》
* s* Z2 u$ U$ R6 ]* w/ l4 [在/WEB-INF/增添一个叫servlet-name-servlet.xml设置装备摆设文件。该文件的命名有必然的轨则,红色servlet-name需要和web.xml中的《servlet-name》springhessian《/servlet-name》界说的名称相匹配,好比本例子应叫springhessian-servlet.xml,如惺招也不轻易犯错。
0 P1 n- I+ z" ]! \6 o当然该文件也可以自己肆意命名。如不美观是自界说的文件名称不合适上述默认的轨则,需要在《servlet》中增添《init-param》相关属性,酬报指定加载设置装备摆设文件,否则会报错。
# d' \! f5 ^' |4 k典型:springhessian-servlet.xml0 ~4 C/ h" l+ m: ~
Xml代码, Q- F( A: O* M; D' j% Q
《?xml version=“1.0” encoding=“UTF-8”?》
' o6 f. U+ q3 q# M, S《!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “http://www.springframework.org/dtd/spring-beans.dtd”》% f1 e$ E& y# Q7 F8 B
《beans》6 U  B1 u( m% H; i9 y, q+ W7 w
《bean id=“helloHessianImpl”
5 P7 j' c4 E: A% r5 vclass=“michael.hessian.impl.HelloHessianImpl” /》
- I* m- n9 t+ O1 W$ I《!-- 使用HessianServiceExporter 将bean生成Hessian处事--》
& A, N! g1 m( C& ^《bean name=“/helloHessianService”
8 m& L3 d6 m$ L8 r. a4 ?+ vclass=“org.springframework.remoting.caucho.HessianServiceExporter”》. E* \0 B$ G, @; i2 h5 i. U3 G5 s3 e
《!-- 界说需要生成处事的实现类--》+ C% ]: _. h" b. D* d
《property name=“service” ref=“helloHessianImpl” /》
3 Z/ L9 q4 B! P! \% {: U. l《!-- Hessian 供给处事的接口--》
' g7 a: q6 u: a- h《property name=“serviceInterface”7 W# k, N" V1 N4 C
value=http://www.examw.com/java/zhuangye/157581/“michael.hessian.HelloHessian” /》
; l7 M" p& j4 N- t- `/ K《/bean》- H0 k% V& A3 y8 K
《/beans》) ~7 M0 u* Y- |& c9 t4 j
《?xml version=“1.0” encoding=“UTF-8”?》# m4 ~, \, y9 q& }
《!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “http://www.springframework.org/dtd/spring-beans.dtd”》
# }% x1 d% r' t& Q& P$ a《beans》( l, B( q  }9 O; D* j5 F" |
《bean id=“helloHessianImpl”
% t: E: e% p9 m$ j6 `class=“michael.hessian.impl.HelloHessianImpl” /》
) p) h! |9 t# M) d* N; H, v  @$ N+ F《!-- 使用HessianServiceExporter 将bean生成Hessian处事--》
* j* E' E. [/ K' X1 M《bean name=“/helloHessianService”9 A- q: M7 k! f- u) H* J( h5 Y* y
class=“org.springframework.remoting.caucho.HessianServiceExporter”》
' l3 t" T, I& V; [9 g, r8 K《!-- 界说需要生成处事的实现类--》
5 h, \5 `2 F0 I- O. Z《property name=“service” ref=“helloHessianImpl” /》# R6 n4 @) O0 q$ N3 M) e2 E! t
《!-- Hessian 供给处事的接口--》; g/ @8 ~/ Y+ _) r- }2 {8 R. c; j6 [
《property name=“serviceInterface”
$ V; F! a5 X% Mvalue=http://www.examw.com/java/zhuangye/157581/“michael.hessian.HelloHessian” /》
: N- T- X) a+ }4 z9 v《/bean》* v& q: o# Q% c* r( ?0 S! f
《/beans》
3 G  y2 ^0 t  m3 t3.java客户端验证
: M9 K0 V' U- H- t2 J5 _! c; r( F9 L. L和膳缦沔的例子相似,只需要把访谒的url替代成新的即可如下:
( g+ _0 t. h, n* {' N5 IJava代码
* J" t8 e; d3 u& BString url=http://localhost:8082/J2EE_sjsky/springhessian/helloHessianService4 F* P. d! q7 Y, L1 B
String url=http://localhost:8082/J2EE_sjsky/springhessian/helloHessianService
) y5 a& I8 b+ |1 x- ~2 L运行结不美观和膳缦沔例子一样。
6 T' K) a# n* B2 E( `1 E* o# `/ U4.spring设置装备摆设客户端
* h& T0 l6 i( Q- ?; k2 [% b增添一个spring的bean设置装备摆设文件hessian-client.xml  I9 g! z! F& E
Xml代码4 `: d2 l2 p4 k
《?xml version=“1.0” encoding=“UTF-8”?》
% P6 ~! |$ b, n4 V0 }《!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “http://www.springframework.org/dtd/spring-beans.dtd”》
" a- x7 D# ~  b0 ~+ u: t6 s《beans》
( |( J7 E/ b6 M+ N1 l+ N. s+ ?《bean id=“helloHessianClient”$ L" G! s1 v3 O( l. {& G' L
class=“org.springframework.remoting.caucho.HessianProxyFactoryBean”》
6 x; w# n5 P8 s5 W2 I* v+ x《property name=“serviceUrl”》
0 v" i, R: s( c. Q( x9 j《value》! {% d- L2 f' k
http://localhost:8082/J2EE_sjsky/springhessian/helloHessianService
8 v2 d2 k" k# d+ C" \《/value》& y' X% R/ ?9 O' k4 j+ f: C
《/property》3 {" M0 A+ J3 v# L
《property name=“serviceInterface”
* O" L% a. [! zvalue=http://www.examw.com/java/zhuangye/157581/“michael.hessian.HelloHessian” /》
8 ?9 U( v$ o' i《/bean》
3 h8 o7 ~  E' x《/beans》* I7 ~( \2 U( R1 d3 p% [
《?xml version=“1.0” encoding=“UTF-8”?》' [6 B: E8 l. |" r
《!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “http://www.springframework.org/dtd/spring-beans.dtd”》3 \8 q$ e  o/ L6 n$ S. \: |
《beans》' D- j5 d$ E& k5 i: J: v
《bean id=“helloHessianClient”
/ y* m! t% m  k4 O8 v/ Gclass=“org.springframework.remoting.caucho.HessianProxyFactoryBean”》
7 Z; M8 Y$ A% E8 C8 ^' w3 d《property name=“serviceUrl”》+ w5 W  ?' z1 F& M
《value》& Q0 e# l$ _- g7 V, t
http://localhost:8082/J2EE_sjsky/springhessian/helloHessianService
: b( y# }0 O. P. @+ F《/value》
) A+ e3 d) P8 S" ]$ \《/property》: L  x, P# K; ]4 L+ K3 @
《property name=“serviceInterface”
- ^% j; u" d: X6 z, i  u& g+ mvalue=http://www.examw.com/java/zhuangye/157581/“michael.hessian.HelloHessian” /》
0 L  ^; d0 M* K《/bean》, }; p6 U9 Q2 Y  k# E2 ~* B7 U: G
《/beans》6 u2 O9 |5 P% ?# e; n" f1 c
测试代码HessianSpringClient.java:: a% E* h4 K1 B4 {
Java代码
& a( `& {. G" Z3 j5 T9 M9 Xpackage michael.hessian.client;5 A1 y4 X  c3 M% |/ R7 d
import java.util.Map;
& h( X3 \) J$ e  R' J5 `import michael.hessian.HelloHessian;% g) E3 q5 a- F! ^% R
import michael.hessian.MyCar;
% F! W5 H+ D$ d8 zimport org.springframework.context.ApplicationContext;/ @: C' N1 V7 ^# q, d2 t4 R3 S) r
import org.springframework.context.support.ClassPathXmlApplicationContext;, L7 _0 @5 e  B* e  F4 R
/**
1 j0 @2 ], d8 g# Y* @author michael
1 C9 H% @/ j% y+ {* Y- w! D* y*
! W4 j: V! [- F5 W9 L*/
8 Q2 Y$ n. X/ ~! L- Q7 L" D3 |# d! L8 ^+ H& q5 j
# I( V2 W0 |/ S9 V5 d3 R
public class HessianSpringClient {! O7 a/ e5 q* M% J
/**
9 K4 G/ y$ i. h* @param args- ?# `' y: o" ^3 j) J+ n0 e
*/
* e0 C! _+ b0 t- s2 ^& _1 upublic static void main(String[] args) {  J6 t1 R5 A! X( b  p3 X8 |" f
try {
) Q$ R% b8 a8 q8 ]9 N+ _ApplicationContext context = new ClassPathXmlApplicationContext(9 L- j# j6 z! \
“hessian-client.xml”);1 z( z: g% T; P( [( X' F9 t- C: @
HelloHessian hello = (HelloHessian) context
, z: Z- t: n3 i1 Q  w.getBean(“helloHessianClient”);9 y! D0 a& M  n$ H$ |+ y2 c
System.out.println(hello.sayHello());0 n$ x$ l( f) S) a4 n
MyCar car = hello.getMyCar();
9 V( d3 m" i1 r$ a# BSystem.out.println(car.toString());, Q" Q* K! T' w  l+ |
for (Map.Entry《String, String》 entry : hello.myBabays().entrySet()) {
1 X) F1 I# A) N: {System.out.println(entry.getKey() + “ ” + entry.getValue());
5 ]# R) s1 e- [; c}
5 T& C* o" s. {; ifor (String str : hello.myLoveFruit()) {
2 v5 l, F+ ~" w5 _System.out.println(str);
, T  I( W1 ^2 K, b& J/ u
# n! x0 @( Z* N9 E7 \1 p: r& h  Q}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 12:28:26 | 显示全部楼层

JAVA技巧:小小试Hessian实现webservice

</p>} catch (Exception e) {' _  E6 p7 K$ t3 k
e.printStackTrace();
& S0 g4 ]$ V% C3 R}
; |' l; Y3 Q0 _' V0 }; {4 f; J}
: K* }- i: L! `4 l, P}
, m  _7 q# D0 Jpackage michael.hessian.client;& E$ _* M+ w5 f! D4 |
import java.util.Map;8 f7 B! D+ y7 c3 C* l
import michael.hessian.HelloHessian;
+ ]  c. \5 d+ b' F3 V  [# Z# Vimport michael.hessian.MyCar;3 E2 S+ @( q8 d9 R: `
import org.springframework.context.ApplicationContext;: t2 H3 M2 h# Q1 ~8 j1 a( z
import org.springframework.context.support.ClassPathXmlApplicationContext;
( L" w5 F9 V$ k) s4 B- |+ X/**
: y; u8 p$ A* ]. k2 D2 y# ]3 D! w* @author michael
* F$ T" F7 `4 U  G+ L*
) ~4 _9 d/ x1 F1 A  a*/
( }4 \' e! f" \% |! q% v. ppublic class HessianSpringClient {
1 d7 v  a% @7 f: ^  ]: F/**
3 }5 i" u/ C, Q/ M# F* @param args' S; [. a9 W0 _
*/
9 S: w" i5 b/ Mpublic static void main(String[] args) {1 V1 W# f8 X0 B+ D6 z; f
try {
9 N: u$ R5 }/ Y' B) ^! y6 SApplicationContext context = new ClassPathXmlApplicationContext(0 G- K# \4 N" B7 }# ]
“hessian-client.xml”);3 H7 Y$ q( v" R2 _) p, A
HelloHessian hello = (HelloHessian) context6 T  L# |1 x) u! q
.getBean(“helloHessianClient”);
9 ~5 l, r* t& q8 V" cSystem.out.println(hello.sayHello());# t0 b; S1 M! _' f3 f) L
MyCar car = hello.getMyCar();
  Q4 x- H# \* C% X1 PSystem.out.println(car.toString());
% F7 G' l) ^% M1 \3 D# n! o- yfor (Map.Entry《String, String》 entry : hello.myBabays().entrySet()) {
) b( m5 G( k9 Z8 d2 R. PSystem.out.println(entry.getKey() + “ ” + entry.getValue());
" C2 m' f3 r- N}" _( \5 [/ D$ s: m; v- P; l
for (String str : hello.myLoveFruit()) {" D: a+ v+ }( ]2 x, V  n# N
System.out.println(str);/ s" \1 q0 f( o% E
}
, I* d0 Z/ Y' `} catch (Exception e) {
1 p+ @8 `  {& Ce.printStackTrace();4 W3 h0 n, ^2 H0 J( o9 F8 E
}
) K  P  p* i( V" |}
3 e$ C/ [9 U' N6 I}! L3 Z7 j; o7 m
运行结不美观和膳缦沔完全一致5 S8 C1 `8 _/ J. ^3 D4 K' S
5.com.caucho.hessian.io.HessianProtocolException: expected string at 0x6d异常措置
& v+ r* a+ x$ P; d: C+ O- k我在spring+hessian整合测试过程中,客户端挪用时,发生了异常,而处事端错误内容如下:" w* ~  ?# ~) B/ V- A# P: }
Java代码
. w; z4 a' |9 y- U6 H2011-4-25 16:14:44 org.apache.catalina.core.StandardWrapperValve invoke& J6 ]7 h. p& d# ?! U
严重: Servlet.service() for servlet remoting threw exception) w$ ^* f0 T4 F: n" J
com.caucho.hessian.io.HessianProtocolException: expected string at 0x6d
. ]# [5 R) Y9 zat com.caucho.hessian.io.Hessian2Input.error(Hessian2Input.java:2882)
! H8 b9 h& s! m" o3 A* lat com.caucho.hessian.io.Hessian2Input.expect(Hessian2Input.java:2830)" l! S; l4 ]3 \3 m2 E% w2 b" m
at com.caucho.hessian.io.Hessian2Input.readString(Hessian2Input.java:1362)
& e4 ^; \1 E: \' v/ aat com.caucho.hessian.io.Hessian2Input.readMethod(Hessian2Input.java:272)/ t$ X2 u" f. O2 V( Y7 Y$ T
at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:249)7 A/ B2 z4 E. P9 i
at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:221)
  i/ w. j) C8 ~at org.springframework.remoting.caucho.Hessian2SkeletonInvoker.invoke(Hessian2SkeletonInvoker.java:67)4 e* J% D+ O. c8 \9 k/ ]7 l+ f
at org.springframework.remoting.caucho.HessianServiceExporter.handleRequest(HessianServiceExporter.java:147)
. v  U) r) \  V* Iat org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49)* h4 x4 \* t, p& l0 {4 I+ Y  M
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:819)
& t5 H% b; f  v5 V4 e4 Dat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:754)3 c6 d3 ^& O: f$ l  d
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:399)7 V6 W8 u+ _" N( b, |, A3 A
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:364)
, v* W) M. y! P7 n: pat javax.servlet.http.HttpServlet.service(HttpServlet.java:710): ^& s  m/ s3 P5 w2 l
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
) Z2 C8 b  E" g* Z! o$ J! j, `at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
9 R- H- Q$ C4 y+ a# k6 jat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)7 G- }# G' ?( B5 S8 I
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230), K! H  }5 A( L6 U; ]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)% E( o* h$ _- \* s: f/ C" L
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)4 E* G7 T4 P5 v) Y5 l! L
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104): \$ m6 U% l% Z5 D
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
/ n2 q  {; w$ M2 G, B" P$ b& uat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261). P( g1 ?, L* V: _$ n
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
3 j8 V: M4 d& }8 `9 Uat org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
+ c, S, y9 l9 |( e- q) U* o+ Wat org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
! y: F" a1 d, m2 n" ~at java.lang.Thread.run(Thread.java:619)$ z( U* \+ W4 `+ Y& c: J1 R2 N
2011-4-25 16:14:44 org.apache.catalina.core.StandardWrapperValve invoke
) ~; _/ O( Q( e9 Z" [) R* c严重: Servlet.service() for servlet remoting threw exception
& b4 V: j( {, E7 T- G# Ncom.caucho.hessian.io.HessianProtocolException: expected string at 0x6d2 q0 l& ]' c0 M. W
at com.caucho.hessian.io.Hessian2Input.error(Hessian2Input.java:2882): H: s0 P. i) p& ?1 H
at com.caucho.hessian.io.Hessian2Input.expect(Hessian2Input.java:2830)
( R7 t! y( ]4 iat com.caucho.hessian.io.Hessian2Input.readString(Hessian2Input.java:1362)
3 B. h( R, |3 R; S. p5 Yat com.caucho.hessian.io.Hessian2Input.readMethod(Hessian2Input.java:272)
# Y' o: M, B' E9 ^+ o! d, B6 O6 zat com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:249)
* C7 E) t2 |* o$ [: [at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:221)
- m0 ^- d( {) G; N  `/ Y0 E9 s% g! N: p
* d: h" H8 L: d6 c/ [% h
at org.springframework.remoting.caucho.Hessian2SkeletonInvoker.invoke(Hessian2SkeletonInvoker.java:67)
/ O/ F7 |' h# i4 l1 }6 tat org.springframework.remoting.caucho.HessianServiceExporter.handleRequest(HessianServiceExporter.java:147)
6 T. U; z% M2 x4 V0 e8 Tat org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49)  R+ n0 b5 X+ x5 E. s
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:819). k# z2 L* b, Y) T# ~9 Q
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:754)
1 Y% A3 q% N' Q9 {* E/ C8 i) eat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:399)
* Y4 ?) D& ]1 v' [( `3 Cat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:364)
" Q& T7 q. a- v# g- u- i; Iat javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
) B+ {' t9 S6 b9 Q4 wat javax.servlet.http.HttpServlet.service(HttpServlet.java:803)2 J7 q8 r. C: R
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
/ R" V% w( y  z, M1 F1 b/ Kat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)3 a, ], R( I6 u$ }% a2 r3 p/ [
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)* o6 z* o" [. ~: ?1 O  ]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)) q) c/ p  r3 O' V# {6 h
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128); D9 S  i1 {* S; c7 O
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
/ ]& p, |1 i3 m1 b, e* h& m; }at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109), X) F/ T5 \' P* O& \/ Z* k
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
; D, u- v; t* s* C/ _3 ?* Xat org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)3 {) ?% G1 p3 i$ ]0 I) ~
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
4 K* \) U' g( Oat org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)9 @% c& r9 I4 P3 M
at java.lang.Thread.run(Thread.java:619)
* C3 L* Q& [7 H1 K; C1 ?经查资料发现原始是hessian和spring的版本不兼容引起的,从头下载hessian-3.1.6.jar导入项目,一路运行正常,测试完全经由过程。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-17 18:30 , Processed in 0.455940 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表