反饋已提交
網絡繁忙
从 Axis2官网 下载 War 包,如下图所示:
将下载的 axis2.war 包解压,移动到%Tomcat_Home%\webapps目录下。
重启 Tomacat 服务器,该目录下自动生成一个文件夹 axis2。
访问localhost:8080/axis2 ,如下图所示,证明部署成功。
注:端口是根据个人设置的 Tomcat 端口进行调整。
根据具体的驱动导入相关依赖,本文以 MySQL 数据库为例,首先导入 MySQL 的 JDBC 驱动。
package service; //需定义包名为service,对应之后的文件夹名import java.sql.*;import java.util.ArrayList;import java.util.List;public class MyService {// 定义数据库连接参数private static final String DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver"; // 驱动private static final String URL = "jdbc:mysql://localhost:3306/z"; // z为数据库名private static final String USERNAME = "root"; // 用户名private static final String PASSWORD = "123456"; // 密码// 注册数据库驱动static {try {Class.forName(DRIVER_CLASS_NAME);} catch (ClassNotFoundException e) {e.printStackTrace();}}// 获取连接private static Connection getConn() throws SQLException {return DriverManager.getConnection(URL, USERNAME, PASSWORD);}// 关闭连接private static void closeConn(Connection conn) {if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}public List<String> get() throws SQLException { // 方法需要声明为public才能被访问List<String> data = new ArrayList<>();Connection connection = getConn();Statement statement = connection.createStatement();String sql = "select id,name from test"; // sql根据自己的需求定义data.add("id name");try {if (statement != null) {ResultSet rs = statement.executeQuery(sql);while (rs.next()) {data.add(rs.getInt(1) + " " + rs.getString(2).trim());}}} catch (SQLException e) {e.printStackTrace();} finally {try {if (statement != null) {statement.close();}closeConn(connection);} catch (Exception e) {e.printStackTrace();}}return data;}// 测试public static void main(String[] args) {List<String> list;MyService service = new MyService();Connection conn = null; // 声明连接conntry {conn = MyService.getConn(); // 获取连接connlist = service.get(); // 获取数据for (String s : list) {System.out.println(s); // 展示获取的数据}} catch (SQLException e) {e.printStackTrace();} finally {if (conn != null) {closeConn(conn); // 关闭连接conn}}}}
注:该代码如果出现错误,用户将无法在设计器中查看,只能在 Tomcat 中看到报错,所以连接之前可以先测试下代码是否能正常取数。
构建 services.xml 文件并放在%Tomcat_Home%\webapps\axis2\META-INF目录下。services.xml 内容如下:
<service name="myService"> <!--service名字可以自己定义--> <description> Web Service </description> <parameter name="ServiceClass"> service.MyService <!--对应包名和类名--> </parameter> <operation name="get" > <!--函数名--> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation></service>
1)新建一个 WS 文件夹,里面再新建两个子文件夹 META-INF 和 service。
2)META-INF 文件夹中放 services.xml。
3)service 文件夹放已经创建好的 JDBC 取数类 MyService.class。
在 Windows 控制台使用 cd 命令进入 WS 目录,并输入如下命令生成 .aar 文件:
jar cvf ws.aar .
生成的 ws.aar 文件移动到 WS 文件夹内,如下图所示:
将 ws.arr 拷贝到%Tomcat_Home%\webapps\axis2\WEB-INF\services目录下,启动 Tomcat 后,就可以调用这个 WebService 了。
注:如果启动 Tomcat 过程中出现报错,有可能是包名或者类名,方法名以及文件夹名有出入,需要仔细检查下。
发布成功后,效果如下图所示:
1)从 Axis2官网 下载 bin 文件,解压后将 lib 文件夹中的 JAR 包导入 IDE 中,FineReport 相关 JAR 包也需要导入。
2)相关代码如下
package com.fr.data;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import com.fr.general.data.TableDataException;import com.fr.log.FineLoggerFactory;import org.apache.axiom.om.*;import org.apache.axis2.addressing.EndpointReference;import org.apache.axis2.client.Options;import org.apache.axis2.client.ServiceClient;public class WebServiceWSDLDataDemo extends AbstractTableData {private String[][] data;public WebServiceWSDLDataDemo() {this.data = getWSDLData();}public int getColumnCount() throws TableDataException {return data[0].length;}// 获取列的名称为数组中第一行的值public String getColumnName(int columnIndex) throws TableDataException {return data[0][columnIndex];}// 获取行数为数据的长度-1public int getRowCount() throws TableDataException {return data.length - 1;}// 获取值public Object getValueAt(int rowIndex, int columnIndex) {return data[rowIndex + 1][columnIndex];}// 取数private static String[][] getResults(OMElement element) {if (element == null) {return null;}Iterator iterator = element.getChildElements();List<String> list = new ArrayList<>();while (iterator.hasNext()) {OMNode omNode = (OMNode) iterator.next();if (omNode.getType() == OMNode.ELEMENT_NODE) {OMElement omElement = (OMElement) omNode;if (omElement.getLocalName().equals("return")) {String temp = omElement.getText().trim();list.add(temp);}}}String[] result1 = list.toArray(new String[list.size()]);String results[][] = new String[result1.length][2]; // 这里的列数根据自己取出的列数而定,行数当然是有多少取多少String b1, b2;for (int i = 0; i < result1.length; i++) {if (result1[i].length() != 0) {b1 = result1[i].substring(0, result1[i].indexOf(" "));b2 = result1[i].substring(result1[i].indexOf(" ") + 1);results[i][0] = b1;results[i][1] = b2;}}return results;}// 获取连接并取数private static String[][] getWSDLData() {try {String url = "http://localhost:8080/axis2/services/myService?wsdl"; // 这里的url即为发布的WebService具体地址EndpointReference targetEPR = new EndpointReference(url);// 创建一个OMFactory,下面的namespace、方法与参数均需由它创建OMFactory fac = OMAbstractFactory.getOMFactory();// 命名空间namespaceOMNamespace omNs = fac.createOMNamespace("http://service", "a");// 方法OMElement method = fac.createOMElement("get", omNs); // 对应方法名// 参数Options options = new Options();options.setTo(targetEPR);options.setAction("http://service/get");// 构建请求ServiceClient sender = new ServiceClient();sender.setOptions(options);// 发送请求OMElement result1 = sender.sendReceive(method);return getResults(result1);} catch (org.apache.axis2.AxisFault e) {FineLoggerFactory.getLogger().error(e, e.getMessage());}return null;}// 测试public static void main(String[] args) {String[][] result = getWSDLData();if (result != null) {int col = result[0].length;for (String[] aResult : result) {for (int j = 0; j < col; j++) {System.out.print(aResult[j] + " ");}System.out.println();}}}}
3)代码编写好后可以先测试下。
1)将在第 4 节中下载的 Axis2 的相关依赖 JAR(除了log4j 的 JAR)放到%FR_HOME%/webapps/webroot/WEB-INF/lib目录下。如下图所示:
2)将编译好的 WebServiceWSDLDataDemo.class 文件放到%FR_HOME%/webapps/webroot/WEB-INF/classes/com/fr/data目录下。
3)在 FineReport 中选择并使用对应的程序数据集,如下图所示:
文 檔回 饋
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉