SSH集成cxf 发布restful webservice

首先讲一下什么是restful webservice ,这个问题网上一搜有很多博文去长篇大论的介绍它,但是最后你看完了也会觉得云里雾里的,所以我在这里简单的讲一下我理解的rest webservice,其实我在使用restful webservice的初衷是为了解决跨域的问题。之前做过一个移动端的产品,使用html5套的原生安卓app的壳,调用服务端发布的rest 服务,通过ajax就可以请求到服务器,并返回需要的json值。

最近自己也在尝试去使用自己搭建的框架去集成CXF发布restwebservice服务,程序已经运行一段时间了,一直都想总结一下,当下终于有时间去记录一下自己的学习历程了。

首先这边使用的框架是hibernate+struts2+spring 典型的三大框架,当然现在很多企业都在使用springMVC 这个其实无所谓的,其次是本项目采用maven进行管理构建,所以配置jar的时候会非常的方便,好了,废话不多说,直接上干货。

一、配置maven依赖包

 1 
 2             org.apache.cxf
 3             cxf-rt-rs-security-cors
 4             3.0.1
 5         
 6         
 7             org.apache.cxf
 8             cxf-core
 9             3.0.1
10         
11         
12             org.apache.cxf
13             cxf-rt-frontend-jaxrs
14             3.0.1
15         
16         
17             javax.ws.rs
18             javax.ws.rs-api
19             2.0
20         
21         
22             org.apache.cxf
23             cxf-rt-transports-http
24             3.0.1
25         
26         
27             org.osgi
28             org.osgi.core
29             4.2.0
30         
31         
32             org.apache.cxf
33             cxf-rt-ws-policy
34             3.0.1
35         
36         
37             org.apache.cxf
38             cxf-rt-wsdl
39             3.0.1
40         
41         
42             wsdl4j
43             wsdl4j
44             1.6.3
45         
46         
47             org.osgi
48             org.osgi.compendium
49             4.2.0
50         
51         
52             xml-resolver
53             xml-resolver
54             1.2
55         
56         
57             asm
58             asm
59             3.3.1
60         
maven配置

二、配置web.xml

 1  
 2      
 3      
 4         CXFServlet
 5         /ws/*
 6     
 7     
 8         CXFServlet
 9         
10             org.apache.cxf.transport.servlet.CXFServlet
11         
12     
13     
14      
web.xml配置

三、配置applicationContext.xml

 1 
 2  3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
 6     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:jaxws="http://cxf.apache.org/jaxws"
 7     xmlns:soap="http://cxf.apache.org/bindings/soap" xmlns:jaxrs="http://cxf.apache.org/jaxrs"
 8     xsi:schemaLocation="http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
 9          http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd
10          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
11          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd 
12          http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
13          http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
14          http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
15          http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">
16 
17     
18     class="cfs.wsdl.mobile.MobileServiceImpl"
19         scope="prototype">
20         
21             
22         
23     
24      
25       
26         
27             
28         
29         
30             class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" />
31              <bean
32                 class="org.apache.cxf.rs.security.cors.CrossOriginResourceSharingFilter">
33                 
34                 
35                 
36             
37         
38         
39             
40             
41         
42         
43             
44         
45       
46       
47 
applicationContext-wsdl.xml

四、接口编写,我这边直接将项目用的接口贴出来了,我们项目中用的全是post提交方式,如果使用get提交可以参考登录方法中被注释的那个方法

  1 package cfs.wsdl.mobile;
  2 
  3 import javax.ws.rs.Consumes;
  4 import javax.ws.rs.FormParam;
  5 import javax.ws.rs.GET;
  6 import javax.ws.rs.POST;
  7 import javax.ws.rs.PUT;
  8 import javax.ws.rs.Path;
  9 import javax.ws.rs.PathParam;
 10 import javax.ws.rs.Produces;
 11 import javax.ws.rs.core.MediaType;
 12 
 13 import cfs.wsdl.cache.Mycache;
 14 
 15 @Path("/rest_MobileService")
 16 public interface MobileService {
 17     
 18     
 19     /**
 20      * 外部注册接口
 21      */
 22     @POST
 23     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
 24     @Path("/external/register")
 25     public String ExternalRegistration(String param);
 26     
 27     /**
 28      * 注册接口
 29      */
 30     @POST
 31     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
 32     @Path("/register")
 33     public String Register(String param);
 34 
 35     /**
 36      * 登录接口
 37      */
 38     /*@GET
 39     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
 40     @Path("/login/{param}")
 41     public String Login(@PathParam("param")String param);*/
 42 
 43     /**
 44      * 登录接口
 45      */
 46     @POST
 47     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
 48     @Path("/login")
 49     public String Login(String param);
 50     /**
 51      * 根据pid加载地区接口
 52      */
 53     @POST
 54     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
 55     @Path("/perfect/province")
 56     public String Province(String param);
 57     
 58     /**
 59      * 根据地区id加载学校接口
 60      */
 61     @POST
 62     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
 63     @Path("/perfect/school")
 64     public String School(String param);
 65     
 66     /**
 67      * 获取学制接口
 68      */
 69     @POST
 70     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
 71     @Path("/perfect/edusystem")
 72     public String EduSystem();
 73     
 74     /**
 75      * 根据学校id加载年级信息接口
 76      */
 77     @POST
 78     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
 79     @Path("/perfect/grade")
 80     public String Grade(String param);
 81     
 82     /**
 83      * 根据学校id和年级id加载学科信息接口
 84      */
 85     @POST
 86     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
 87     @Path("/perfect/subject")
 88     public String Subject(String param);
 89     
 90     /**
 91      * 加载全部学科信息接口
 92      */
 93     @POST
 94     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
 95     @Path("/perfect/allsubject")
 96     public String AllSubject(String param);
 97     
 98     /**
 99      * 加载用户信息接口
100      */
101     @POST
102     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
103     @Path("/load/user")
104     public String LoadUser(String param);
105     
106     
107     /**
108      * 根据学校id和年级id和学科id加载版本信息接口
109      */
110     @POST
111     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
112     @Path("/perfect/master")
113     public String Master(String param);
114     
115     
116 
117     /**
118      * 根据年级id加载版本信息接口(实际是小学、初中都用人教版,高中去教材里去查,只要是高中(年级为11、12、13)去数据库里查教材 能查到的版本都列出来
119      * )
120      */
121     @POST
122     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
123     @Path("/perfect/masterbygrade")
124     public String MasterByGrade(String param);
125     
126     
127     /**
128      * 完善信息保存提交接口
129      */
130     @POST
131     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
132     @Path("/perfect/submit")
133     public String Perfect(String param);
134     
135     /**
136      * 验证登录用户是否有班级信息接口
137      */
138     @POST
139     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
140     @Path("/class/validate")
141     public String ClassValidate(String param);
142     
143     /**
144      * 新建班级信息接口
145      */
146     @POST
147     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
148     @Path("/class/add")
149     public String NewClass(String param);
150     
151     
152     /**
153      * 根据用户id和班级号加载学科信息接口
154      */
155     @POST
156     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
157     @Path("/class/subject")
158     public String ClassSubject(String param);
159     
160     /**
161      * 生成邀请码接口
162      */
163     @POST
164     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
165     @Path("/class/code")
166     public String ClassCode(String param);
167     
168     /**
169      * 接受邀请码接口
170      */
171     @POST
172     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
173     @Path("/class/receivecode")
174     public String ReceiveCode(String param);
175     
176     
177     /**
178      * 移除老师接口
179      */
180     @POST
181     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
182     @Path("/class/removeteacher")
183     public String RemoveTeacher(String param);
184     
185     /**
186      * 转让管理权接口
187      */
188     @POST
189     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
190     @Path("/class/attornmanage")
191     public String AttornManage(String param);
192     
193     /**
194      * 解散班级接口
195      */
196     @POST
197     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
198     @Path("/class/dismiss")
199     public String Dismiss(String param);
200     
201     /**
202      * 查询指定班级学生接口
203      */
204     @POST
205     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
206     @Path("/class/student")
207     public String Student(String param);
208     
209     /**
210      * 删除指定班级学生接口
211      */
212     @POST
213     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
214     @Path("/class/delstudent")
215     public String DelStudent(String param);
216     
217     /**
218      * 查询教材、章节课时接口
219      */
220     @POST
221     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
222     @Path("/work/section")
223     public String Section(String param);
224     
225     /**
226      * 查询作业类型接口
227      */
228     @POST
229     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
230     @Path("/work/type")
231     public String workType(String param);
232     
233     /**
234      * 新建作业接口
235      */
236     @POST
237     @Consumes(MediaType.APPLICATION_JSON)
238     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
239     @Path("/work/add")
240     public String workAdd(String param);
241     
242     
243     /**
244      * 查询课时作业接口
245      */
246     @POST
247     @Consumes(MediaType.APPLICATION_JSON)
248     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
249     @Path("/work/classhour")
250     public String workClassHour(String param);
251     
252     
253     /**
254      * 查询指定老师创建的作业接口
255      */
256     @POST
257     @Consumes(MediaType.APPLICATION_JSON)
258     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
259     @Path("/work/gethomework")
260     public String gethomework(String param);
261     
262     
263     
264     /**
265      * 保存试题接口
266      */
267     @POST
268     @Consumes(MediaType.APPLICATION_JSON)
269     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
270     @Path("/work/addquestions")
271     public String workAddQuestions(String param);
272     
273     
274     
275     /**
276      * 获取试题信息接口
277      */
278     @POST
279     @Consumes(MediaType.APPLICATION_JSON)
280     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
281     @Path("/work/getquestions")
282     public String getquestions(String param);
283     
284     
285     
286     /**
287      * 修改试题信息接口
288      */
289     @POST
290     @Consumes(MediaType.APPLICATION_JSON)
291     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
292     @Path("/work/eidtquestions")
293     public String editQuestions(String param);
294     
295     /**
296      * 移除试题信息接口
297      */
298     @POST
299     @Consumes(MediaType.APPLICATION_JSON)
300     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
301     @Path("/work/delquestions")
302     public String delQuestions(String param);
303     
304     
305     
306     /**
307      * 移除作业信息接口
308      */
309     @POST
310     @Consumes(MediaType.APPLICATION_JSON)
311     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
312     @Path("/work/delhomework")
313     public String delhomework(String param);
314     
315     /**
316      * 布置作业接口
317      */
318     @POST
319     @Consumes(MediaType.APPLICATION_JSON)
320     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
321     @Path("/work/assign")
322     public String workAssign(String param);
323     
324     /**
325      * 修改布置作业接口
326      */
327     @POST
328     @Consumes(MediaType.APPLICATION_JSON)
329     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
330     @Path("/work/editassign")
331     public String workEditAssign(String param);
332     
333     /**
334      * 移除布置作业接口
335      */
336     @POST
337     @Consumes(MediaType.APPLICATION_JSON)
338     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
339     @Path("/work/delassign")
340     public String workDelAssign(String param);
341     
342     /**
343      * 查看我布置的作业(历次作业)接口
344      */
345     @POST
346     @Consumes(MediaType.APPLICATION_JSON)
347     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
348     @Path("/work/assignlist")
349     public String workGetAssignList(String param);
350     
351     
352     /**
353      * 查看布置作业详细信息接口
354      */
355     @POST
356     @Consumes(MediaType.APPLICATION_JSON)
357     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
358     @Path("/work/getassign")
359     public String workGetAssign(String param);
360     
361     
362     /**
363      * 查看批改作业信息接口
364      */
365     @POST
366     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
367     @Path("/work/correct/homework")
368     public String correctHomeWork(String param);
369     
370     
371     /**
372      * 查看批改试题信息接口
373      */
374     @POST
375     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
376     @Path("/work/correct/question")
377     public String correcQuestion(String param);
378     
379     /**
380      * 批改作业保存错题接口
381      */
382     @POST
383     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
384     @Path("/work/correct/submit")
385     public String correcSubmit(String param);
386     
387     
388     /**
389      * 批改作业保存错题给平板的接口
390      */
391     @POST
392     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
393     @Path("/work/correct/submitpostil")
394     public String correcSubmitPostil(String param);
395     
396     
397     /**
398      * 查看学生做完的作业接口
399      */
400     @POST
401     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
402     @Path("/view/homework")
403     public String viewHomework(String param);
404     
405     /**
406      * 查看学生做完的试题接口
407      */
408     @POST
409     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
410     @Path("/view/question")
411     public String viewQuestion(String param);
412     
413     /**
414      * 统计接口
415      */
416     @POST
417     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
418     @Path("/report")
419     public String report(String param);
420     
421     
422     /**
423      * 学生端完善信息接口
424      */
425     @POST
426     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
427     @Path("/student/perfect")
428     public String studentPerfect(String param);
429     
430     
431     /**
432      * 加载学生信息接口
433      */
434     @POST
435     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
436     @Path("/student/loaduser")
437     public String studentLoaduser(String param);
438     
439     /**
440      * 学生端查看科目,并查询新作业信息
441      */
442     @POST
443     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
444     @Path("/student/subject")
445     public String studentSubject(String param);
446     
447     /**
448      * 学生端查看指定学科的作业信息
449      */
450     @POST
451     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
452     @Path("/student/scuject/homework")
453     public String studentHomeworkByScuject(String param);
454     
455     /**
456      * 学生端查询指定作业下试题信息(答题使用)
457      */
458     @POST
459     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
460     @Path("/student/questions")
461     public String studentQuestions(String param);
462     
463     
464     /**
465      * 学生保存作业信息接口
466      */
467     @POST
468     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
469     @Path("/student/savehomework")
470     public String studentSaveHomework(String param);
471     
472     /**
473      * 学生端加载教材、章、节、课时信息接口
474      */
475     @POST
476     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
477     @Path("/student/section")
478     public String studentSection(String param);
479     
480     /**
481      * 学生端加载本次错题信息接口
482      */
483     @POST
484     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
485     @Path("/student/error")
486     public String studentError(String param);
487     
488     /**
489      * 学生端加载当前错题(过滤本次,未掌握的错题)信息接口
490      */
491     @POST
492     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
493     @Path("/student/error/current")
494     public String studentErrorByCurrent(String param);
495     
496     /**
497      * 学生端加载历史错题(已掌握的错题)信息接口
498      */
499     @POST
500     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
501     @Path("/student/error/history")
502     public String studentErrorByHistory(String param);
503     
504     
505     /**
506      * 学生端将当前错题转移到历史错题中接口
507      */
508     @POST
509     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
510     @Path("/student/curren2history")
511     public String studentCurren2history(String param);
512     
513     
514     
515     /**
516      * 家长完善信息接口
517      */
518     @POST
519     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
520     @Path("/patriarch/perfect")
521     public String patriarchPerfect(String param);
522     
523     /**
524      * 家长端给孩子退班接口
525      */
526     @POST
527     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
528     @Path("/patriarch/quit")
529     public String patriarchQuit(String param);
530     
531     /**
532      * 家长端查询孩子作业接口
533      */
534     @POST
535     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
536     @Path("/patriarch/work")
537     public String patriarchWork(String param);
538     
539     /**
540      * 家长端查看学生做完的试题接口
541      */
542     @POST
543     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
544     @Path("/patriarch/question")
545     public String patriarchQuestion(String param);
546     
547     /**
548      * 家长端查看家长信息
549      */
550     @POST
551     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
552     @Path("/patriarch/loaduser")
553     public String patriarchLoaduser(String param);
554     
555     /**
556      * 查看历史消息接口
557      */
558     @POST
559     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
560     @Path("/message/history")
561     public String messageHistory(String param);
562     
563     /**
564      * 更改密码接口
565      */
566     @POST
567     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
568     @Path("/repwd")
569     public String RePwd(String param);
570     
571     /**
572      * 收藏试题接口
573      */
574     @POST
575     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
576     @Path("/collect/question")
577     public String collectQuestion(String param);
578     
579     /**
580      * 查询我收藏的试题接口
581      */
582     @POST
583     @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
584     @Path("/collect/view")
585     public String collectView(String param);
586     
587     
588 }
MobileService

五、编写对应的service实现类,也就是在第二步中配置的实现类,文件太大只好挂个路径了。

 http://pan.baidu.com/s/1skOAOpv

六、个人使用心得:

通过这种方式发布的服务,经过测试ios可以通过anf框架调用成功,Android也可以通过OKhttp方式去调用。

下面贴出我用ajax方式调用的方式:

   1 
调用的javacript

使用java类客户端调用发布的服务

  1 package cfs.wsdl.client;
  2 
  3 import java.io.BufferedReader;
  4 import java.io.IOException;
  5 import java.io.InputStreamReader;
  6 import java.io.OutputStream;
  7 import java.net.HttpURLConnection;
  8 import java.net.MalformedURLException;
  9 import java.net.URL;
 10 
 11 
 12 
 13 public class Cxfclient {
 14     
 15     
 16     private static final String targetURL = "http://127.0.0.1:8082/cfs/ws/rest/rest_MobileService/login";
 17     public static void main(String[] args) {
 18         String str = "{\"phone\":\"1889999888\",\"profile_name\":\"teacher\"}";
 19         String json=postMethod(str);
 20         System.out.println(json);
 21     }
 22     public static String getMethod(String str){
 23         String json="";
 24         try {
 25 
 26              URL restServiceURL = new URL(targetURL);
 27 
 28              HttpURLConnection httpConnection = (HttpURLConnection) restServiceURL.openConnection();
 29              httpConnection.setRequestMethod("GET");
 30              httpConnection.setRequestProperty("Accept", "application/json;charset=utf-8");
 31 
 32              if (httpConnection.getResponseCode() != 200) {
 33                     throw new RuntimeException("HTTP GET Request Failed with Error code : "
 34                                   + httpConnection.getResponseCode());
 35              }
 36 
 37              BufferedReader responseBuffer = new BufferedReader(new InputStreamReader(
 38                     (httpConnection.getInputStream())));
 39 
 40              String output;
 41              while ((output = responseBuffer.readLine()) != null) {
 42                      json+=output;
 43                      json=new String(json.getBytes(),"UTF-8");
 44              }
 45 
 46              httpConnection.disconnect();
 47 
 48         } catch (MalformedURLException e) {
 49 
 50              e.printStackTrace();
 51 
 52         } catch (IOException e) {
 53 
 54              e.printStackTrace();
 55 
 56         }
 57         
 58         return json;
 59 
 60     }
 61     
 62     
 63     public static String postMethod(String str){
 64         String json="";
 65           try {
 66 
 67               URL targetUrl = new URL(targetURL);
 68 
 69               HttpURLConnection httpConnection = (HttpURLConnection) targetUrl.openConnection();
 70               httpConnection.setDoOutput(true);
 71               httpConnection.setRequestMethod("POST");
 72               httpConnection.setRequestProperty("Content-Type", "application/json;charset=utf-8");
 73               OutputStream outputStream = httpConnection.getOutputStream();
 74               outputStream.write(str.getBytes());
 75               outputStream.flush();
 76               if (httpConnection.getResponseCode() != 200) {
 77                      throw new RuntimeException("Failed : HTTP error code : "
 78                             + httpConnection.getResponseCode());
 79               }
 80               BufferedReader responseBuffer = new BufferedReader(new InputStreamReader(
 81                             (httpConnection.getInputStream())));
 82 
 83               String output;
 84               while ((output = responseBuffer.readLine()) != null) {
 85                        json+=output;
 86                        json=new String(json.getBytes(),"UTF-8");
 87               }
 88 
 89               httpConnection.disconnect();
 90          } catch (MalformedURLException e) {
 91               e.printStackTrace();
 92          } catch (IOException e) {
 93               e.printStackTrace();
 94         }
 95 
 96         return json;
 97 
 98     }
 99     
100 }
Cxfclient.java

七、最后总结注意事项:

CXF发布的restful 服务如果通过ajax方式传入到后台的话他会解析成这种格式:

1 user_id=1+1=2&homework_name=2&textbook_id=3§ion_id=4&qut[0][stem_text]=11&qut[0][stem_picture]=22&qut[0][question_type]=1&qut[0][reference_answers_text]=111&qut[0][reference_answers_pciture]=222&qut[0][qpt][0][pack_no]=1&qut[0][qpt][0][reference_answers]=1111&qut[0][qpt][1][pack_no]=2&qut[0][qpt][1][reference_answers]=2222&qut[1][stem_text]=22&qut[1][stem_picture]=33&qut[1][question_type]=2&qut[1][reference_answers_text]=444&qut[1][reference_answers_pciture]=222&qut[1][qpt][0][pack_no]=1&qut[1][qpt][0][reference_answers]=1111&qut[1][qpt][1][pack_no]=2&qut[1][qpt][1][reference_answers]=2222
ajax、ios、android调用服务接口得到的参数格式

而使用java 去调用服务接口传递的参数则是json格式,如果以后各位在用的时候可以在服务端打个断点跟进去看一下 具体是什么格式,然后再对数据进行不同的处理就好了,OK,大功告成!

转载于:https://www.cnblogs.com/mycifeng/p/5563651.html

你可能感兴趣的:(SSH集成cxf 发布restful webservice)