Java WebService記

Web Services開發

==============

常用的 Web Services 框架有 Apache Axis1 、 Apache Axis2 、 Apache CXF ,而 Apache Axis1 已經逐漸被淘汰所以本文不會討論,重點關注 Apache Axis2 及 Apache CXF 。

Apache Axis2

============

在IDEA中新建 Axis2Demo 項目后右鍵選擇?添加框架的支持?并選中 Web Application 。

Java WebService記

Java WebService記

從Apache Axis2官網處下載 war包 進行部署,將 axis2.war 解壓后把 WEB-INF 和 axis2-web目錄復制到項目的 web 目錄下(如下圖所示)并啟動Tomcat Server。

Java WebService記

Java WebService記

訪問

http://localhost:8080/Axis2Demo_war_exploded/axis2-web/index.jsp 出現下圖的頁面表示部署成功。

Java WebService記

?

Java WebService記

Axis2配置

=======

在 Axis1 中的全局配置和 Servcies 的配置均在 server-config.wsdd 中進行配置,而 Axis2則將全局配置單獨存放于 WEB-INF/conf/axis2.xml 中, services 的配置文件則位于 servcies。

發布服務(Publish Service)

=====================

新建一個 HelloService 類并編譯為 HelloService.class 復制至 WEB-INF/pojo 目錄下并重啟服務。

// 不能聲明package

public class HelloService {

public HelloService(){}

public String sayHello() {

return “hello”;

}

public String sayHelloToPerson(String name) {

if (name == null) {

name = “nobody”;

}

return "hello, " + name;

}

}

重啟服務后再次訪問

http://localhost:8080/Axis2Demo_war_exploded/services/HelloService?wsdl 即可發現新發布的服務,點擊 HelloService 即可查看Axis自動為該服務生成的WSDL,其描述了如何調用服務的方法及返回內容:

Java WebService記

Java WebService記

Java WebService記

使用 SoapUI 客戶端調用 HelloService 服務方法:

Java WebService記

?

Java WebService記

而之所以 WEB-INF/pojo 目錄下的 .class 文件會自動發布為服務是因為在 axis2.xml 配置文件中的 deployer 標簽中所配置的該選項。

上述的方式發布服務需要將編譯后的類放置在某個具體的目錄中,且不能包含 package ,而使用 *.aar 的方式則可以解決此問題。首先在Project的根目錄下新建 META-INF/services.xml ,文件內容可以參考官方示例 version.aar 。

<?xml version="1.0" encoding="UTF-8"?>

一個簡單的WebService

com.ws.test.services.HelloService

<messageReceiver mep=“http://www.w3.org/ns/wsdl/in-only”

class=“org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver” />

<messageReceiver mep=“http://www.w3.org/2004/08/wsdl/in-out”

class=“org.apache.axis2.rpc.receivers.RPCMessageReceiver” />

最終結構為如下所示,在項目根目錄中執行?jar cvf HelloService.aar .?進行打包。

Java WebService記

?

Java WebService記

將打包后的文件復制至 WEB-INF/services 目錄下,即可在服務列表中看到新注冊的服務,或者在 Axis 后臺中也可以上傳包部署(因此如果應用程序的Axis后臺可訪問且為默認憑據即可部署惡意Service獲取權限)。

Java WebService記

?

Java WebService記

客戶端服務調用

=======

調用 Web Service 可通過代碼的方式實現也可以通過WSDL構造SOAP協議調用方法,最簡便的方法則是使用SoapUI,其會根據 Web Service 的WSDL生成對應方法的SOAP協議請求。

// 代碼實現Web Service調用

import javax.xml.namespace.QName;

import org.apache.axis2.addressing.EndpointReference;

import org.apache.axis2.client.Options;

import org.apache.axis2.rpc.client.RPCServiceClient;

public class WebServiceClient {

public static void main(String[] args) throws Exception {

RPCServiceClient serviceClient = new RPCServiceClient();

Options options = serviceClient.getOptions();

EndpointReference targetEPR = new EndpointReference(“http://192.168.0.105:8080/Axis2Demo_war_exploded/services/HelloService”);

options.setTo(targetEPR);

Object[] entryArgs = new Object[]{4, 2};

QName qName = new QName(“http://ws.apache.org/axis2”, “add”);

Object result = serviceClient.invokeBlocking(qName, entryArgs, new Class[]{int.class})[0];

qName = new QName(“http://ws.apache.org/axis2”, “send”);

serviceClient.invokeRobust(qName, new Object[]{“hello world!”});

}

}

Soap UI

Java WebService記

?

Java WebService記

Apache CXF

==========

Apache CXF是一個開源的、全功能的,容易使用的Web服務框架。CXF是兩個項目的結合:由IONA技術公司開發的Celtix和由Codehaus主持的團隊開發的XFire。

CXF支持的特性非常廣泛,但特性主要在以下一些方面:

  • 支持的Web服務標準包括: SOAP WS-Addressing WS-Policy WS-ReliableMessaging WS-Security WS-SecurityPolicy WS-SecureConversation

  • JAS-WS API,用于Web服務開發 WSDL優先支持工具 Java優先支持

  • JAX-RS(JSR 311 1.0)API,用于RESTful Web服務開發

??內容摘自Wiki百科。

發布服務

====

使用 Maven 構建項目,POM文件內容如下:

<?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/xsd/maven-4.0.0.xsd”>

4.0.0

org.example

CXFDemo

1.0-SNAPSHOT

org.apache.cxf

cxf-rt-frontend-jaxws

3.4.0

org.apache.cxf

cxf-rt-transports-http

3.4.0

org.apache.cxf

cxf-rt-transports-http-jetty

3.4.0

org.apache.cxf

cxf-rt-transports-http-jetty

3.4.0

編寫一個服務接口,定義 sayHi 方法:

package org.example.services;

import javax.jws.WebService;

// 聲明這是一個Ws服務接口

@WebService

public interface HelloWorld {

// 定義服務方法

String sayHi(String name);

}

編寫一個服務接口的實現類:

package org.example.services;

import javax.jws.WebService;

@WebService(endpointInterface = “org.example.services.HelloWorld”, serviceName = “HelloWorld”)

public class HelloWorldImpl implements HelloWorld {

public String sayHi(String name) {

return "hi, " + name;

}

}

再編寫一個發布服務的主類 Main :

import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

import org.example.services.HelloWorld;

import org.example.services.HelloWorldImpl;

public class Main {

最后

總的來說,面試官要是考察思路就會從你實際做過的項目入手,考察你實際編碼能力,就會讓你在電腦敲代碼,看你用什么編輯器、插件、編碼習慣等。所以我們在回答面試官問題時,有一個清晰的邏輯思路,清楚知道自己在和面試官說項目說技術時的話就好了

pl implements HelloWorld {

public String sayHi(String name) {

return "hi, " + name;

}

}

再編寫一個發布服務的主類 Main :

import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

import org.example.services.HelloWorld;

import org.example.services.HelloWorldImpl;

public class Main {

最后

總的來說,面試官要是考察思路就會從你實際做過的項目入手,考察你實際編碼能力,就會讓你在電腦敲代碼,看你用什么編輯器、插件、編碼習慣等。所以我們在回答面試官問題時,有一個清晰的邏輯思路,清楚知道自己在和面試官說項目說技術時的話就好了

[外鏈圖片轉存中…(img-YIdcWISY-1720090990881)]

[外鏈圖片轉存中…(img-ScyT4msQ-1720090990882)]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40649.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40649.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40649.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

每天10個js面試題(一)

1.js基本數據類型&#xff1f; JavaScript 共有八種數據類型&#xff0c;分別是Undefined、Null、Boolean、Number、String、Object、Symbol、BigInt。其中 Symbol 和 BigInt 是 ES6 中新增的數據類型 2.let、const、var的區別&#xff1f; let和const有暫時性死區&#xff0…

開源模型應用落地-LangChain高階-智能體探究-agent類型(一)

一、前言 大模型具有非常強大的功能,可以解答疑問、撰寫報告和文檔、總結內容、進行翻譯等各種日常工作任務。然而,大模型還可以應用于更多的場景,發揮出更強大的作用。 通過智能體,我們可以實現許多有價值的事情,比如:在日常生活中,我們能借助智能體實現智能家居的自動化…

【滲透入門】SQL注入

聲明&#xff1a;本文檔或演示材料僅供教育和教學目的使用&#xff0c;任何個人或組織使用本文檔中的信息進行非法活動&#xff0c;均與本文檔的作者或發布者無關。 文章目錄 什么是sql注入sql注入舉例防御方式練習靶場 什么是sql注入 SQL注入是一種網絡安全漏洞&#xff0c;攻…

【Android源碼】Gerrit安裝

前言 如果你打開 https://android.googlesource.com/platform/manifest&#xff0c;就會發現&#xff0c;google官方管理Android源碼&#xff0c;使用的是Gerrit。Android系統源碼是非常大的&#xff0c;用Git肯定是不適合。對于大型項目&#xff0c;得用Gerrit&#xff0c;今…

NoSQL之Redis高可用與優化

一、Redis高可用 在web服務器中&#xff0c;高可用是指服務器可以正常訪問的時間&#xff0c;衡量的標準是在多長時間內可以提供正常服務&#xff08;99.9%、99.99%、99.999%等等&#xff09;。 但是在Redis語境中&#xff0c;高可用的含義似乎要寬泛一些&#xff0c;除了保證…

二叉樹的鏈式訪問 與 二叉樹專題

目錄 二叉樹的前、中、后序遍歷求二叉樹第K層節點的個數二叉樹查找值為x的節點leetcode相同的樹對稱二叉樹二叉樹的前序遍歷另一棵子樹牛客 二叉樹的遍歷 二叉樹的前、中、后序遍歷 1.前序遍歷&#xff1a;先訪問根節點&#xff0c;再訪問左子樹&#xff0c;最后訪問右子樹 根…

【備忘】fastadmin 如何獲取列表選中行的pk

去官方搜沒搜出來&#xff0c;還得是萬能的網友厲害。 //獲取選中項 $(document).on("click", ".btn-selected", function () {// 獲取選中項idsconsole.log(JSON.stringify(Table.api.selectedids(table)));// 獲取選中項所有數據console.log(JSON.strin…

輸入一個整數n,輸出n的約數為質數的數?兩個問題n的約數問題和n的質數問題

輸入一個整數n&#xff0c;輸出n的約數為質數的數&#xff1f; 一.首先解決n的質數的問題&#xff08;1&#xff09;枚舉法&#xff08;2&#xff09;埃氏篩 二.解決n的質數約數問題 一.首先解決n的質數的問題 &#xff08;1&#xff09;枚舉法 考慮質數的定義&#xff1a;在大…

conda中創建環境并安裝tensorflow1版本

conda中創建環境并安裝tensorflow1版本 一、背景二、命令三、驗證一下 一、背景 最近需要使用tensorflow1版本的&#xff0c;發個記錄&#xff01; 二、命令 conda create -n tf python3.6 #創建tensorflow虛擬環境 activate tf #激活環境&#xff0c;每次使用的時候都…

理解策略梯度方法:從REINFORCE到PPO

今年2月的時候&#xff0c;導師突然告訴我Ron William離世了。他算是我導師的 a life time friend&#xff0c;關系很好&#xff0c;我做畢業論文的時候&#xff0c;他還來參與了論文的答辯。Ron是一個很友善的老頭&#xff0c;和他在強化學習領域的影響力比起來&#xff0c;本…

汽車信息安全--數據安全:圖像脫敏

General 隨著車聯網的發展&#xff0c;汽車越來越智能化&#xff0c;就像是一部“裝著四個輪子的手機”。 有人說&#xff0c;智能手機就如同一部竊聽器&#xff0c;無論你開機或者關機&#xff0c;它都會無時不刻地監聽著用戶的一舉一動。 可想而知&#xff0c;智能車輛上…

馬工程刑法期末復習筆記重點2

馬工程刑法期末復習筆記重點2

SpringBoot 參數校驗

參數校驗 引入springvalidation依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>參數前添加Pattern public Result registry(Pattern(regexp &qu…

Java面向對象練習(2.商品類)(2024.7.4)

商品類 package Supermarket20240704;public class Commodity {private String name;private double price;private int inventory;public Commodity(){};public Commodity(String name, double price, int inventory){this.name name;this.price price;this.inventory inv…

Java核心技術【十九】Iterator與增強for循環

Java中的Iterator與增強for循環 在Java編程中&#xff0c;迭代是處理集合元素的一種常見操作。Java提供了多種迭代集合元素的方式&#xff0c;其中最常用的兩種是Iterator和增強for循環&#xff08;也稱為“for-each”循環&#xff09;。本文將深入探討這兩種迭代方式的特性和…

CLAM用于弱監督WSI分析

計算病理學&#xff08;computational pathology&#xff09;下的深度學習方法需要手動注釋大型 WSI 數據集&#xff0c;并且通常存在領域適應性和可解釋性較差的問題。作者報告了一種可解釋的弱監督深度學習方法&#xff0c;只需要WSI級標簽。將該方法命名為聚類約束注意力多實…

Perl 格式化輸出:提升代碼可讀性的技巧

引言 Perl 是一種功能強大的腳本語言&#xff0c;廣泛用于文本處理、系統管理、網絡編程等多個領域。在 Perl 編程中&#xff0c;代碼的格式化輸出不僅有助于提升代碼的可讀性&#xff0c;還能增強程序的用戶體驗。本文將詳細介紹如何在 Perl 中實現代碼的格式化輸出。 Perl …

【HarmonyOS4學習筆記】《HarmonyOS4+NEXT星河版入門到企業級實戰教程》課程學習筆記(二十一)

課程地址&#xff1a; 黑馬程序員HarmonyOS4NEXT星河版入門到企業級實戰教程&#xff0c;一套精通鴻蒙應用開發 &#xff08;本篇筆記對應課程第 31 節&#xff09; P31《30.數據持久化-關系型數據庫》 上一節中學習了使用用戶首選項的方式實現數據持久化&#xff0c;但用戶首…

微機原理 選擇題

D C MOV、PUSH、POP、XLAT&#xff08;查表&#xff09;、IN、OUT不影響標志位 D B D C D C D B 1. (單選題, 5分)8位無符號數(字節)表示的數值范圍是( ), 16位無符號數(字)表示的數值范圍是( )。 A. 0~128 0~32768B. 0~255 0~655…

為什么 npm run serve 正常,npm run build 就報錯:digital envelope routines::unsupported

這個錯誤通常與 Node.js 版本和使用的加密算法有關。讓我解釋一下原因和可能的解決方案&#xff1a; 錯誤原因 這個錯誤&#xff08;“error:0308010C:digital envelope routines::unsupported”&#xff09;通常發生在以下情況&#xff1a; 使用較新版本的 Node.js&#xf…