axis webservice php,SpringBoot 使用Axis集成WebService

1、前景回顾

在上一章我介绍了SpringBoot使用CXF集成WebService《SpringBoot 使用CXF 集成WebService》,想了解的可以回顾下。

本章我们来一起研究下如何集成Axis,这个相比较CXF集成就复杂了些。

2、SpringBoot集成WebService

2.1 添加依赖

compile('org.springframework.boot:spring-boot-starter-web-services',

'org.apache.axis:axis:1.4',

'axis:axis-jaxrpc:1.4',

'commons-discovery:commons-discovery:0.2',

'wsdl4j:wsdl4j:1.6.3'

)

我这项目是使用gradle构建的项目, 使用Maven也一样,在pom中导入对应的jar就可以了。

2.2 添加 Servlet

import org.apache.axis.transport.http.AxisServlet;

import org.springframework.stereotype.Component;

/**

* @author yueli

* @date 2019-08-05 19:14

*/

@Component

@javax.servlet.annotation.WebServlet(

urlPatterns = "/axis/services/*",

loadOnStartup = 1,

name = "AxisServlet"

)

public class WebServlet extends AxisServlet {

}

注意:启动类上需要田间@ServletComponentScan注解,以便扫描到我们自己定义的Servlet。

2.3 重写Axis的配置工厂信息

因我们要使用jar来发布,所以必须要重写配置工厂,否则访问不到。这个直接copy过去就可以使用。

/*

* Copyright 2002-2004 The Apache Software Foundation.

*

* Licensed under the Apache License, Version 2.0 (the "License");

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

* http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*/

package org.apache.axis.configuration;

import org.apache.axis.AxisProperties;

import org.apache.axis.ConfigurationException;

import org.apache.axis.EngineConfiguration;

import org.apache.axis.EngineConfigurationFactory;

import org.apache.axis.components.logger.LogFactory;

import org.apache.axis.server.AxisServer;

import org.apache.axis.utils.ClassUtils;

import org.apache.axis.utils.Messages;

import org.apache.commons.logging.Log;

import javax.servlet.ServletConfig;

import java.io.InputStream;

/**

* This is a default implementation of ServletEngineConfigurationFactory.

* It is user-overrideable by a system property without affecting

* the caller. If you decide to override it, use delegation if

* you want to inherit the behaviour of this class as using

* class extension will result in tight loops. That is, your

* class should implement EngineConfigurationFactory and keep

* an instance of this class in a member field and delegate

* methods to that instance when the default behaviour is

* required.

*

* @author Richard A. Sitze

* @author Davanum Srinivas (dims@apache.org)

*/

public class EngineConfigurationFactoryServlet

extends EngineConfigurationFactoryDefault {

protected static Log log =

LogFactory.getLog(EngineConfigurationFactoryServlet.class.getName());

private ServletConfig cfg;

/**

* Creates and returns a new EngineConfigurationFactory.

* If a factory cannot be created, return 'null'.

*

* The factory may return non-NULL only if:

* - it knows what to do with the param (param instanceof ServletContext)

* - it can find it's configuration information

*

* @see EngineConfigurationFactoryFinder

*/

public static EngineConfigurationFactory newFactory(Object param) {

/**

* Default, let this one go through if we find a ServletContext.

*

* The REAL reason we are not trying to make any

* decision here is because it's impossible

* (without refactoring FileProvider) to determine

* if a *.wsdd file is present or not until the configuration

* is bound to an engine.

*

* FileProvider/EngineConfiguration pretend to be independent,

* but they are tightly bound to an engine instance...

*/

return (param instanceof ServletConfig)

? new EngineConfigurationFactoryServlet((ServletConfig) param)

: null;

}

/**

* Create the default engine configuration and detect whether the user

* has overridden this with their own.

*/

protected EngineConfigurationFactoryServlet(ServletConfig conf) {

super();

this.cfg = conf;

}

/**

* Get a default server engine configuration.

*

* @return a server EngineConfiguration

*/

public EngineConfiguration getServerEngineConfig() {

return getServerEngineConfig(cfg);

}

/**

* Get a default server engine configuration in a servlet environment.

*

* @param cfg a ServletContext

* @return a server EngineConfiguration

*/

private static EngineConfiguration getServerEngineConfig(ServletConfig cfg) {

// Respect the system property setting for a different config file

String configFile = cfg.getInitParameter(OPTION_SERVER_CONFIG_FILE);

if (configFile == null)

configFile =

AxisProperties.getProperty(OPTION_SERVER_CONFIG_FILE);

if (configFile == null) {

configFile = SERVER_CONFIG_FILE;

}

/**

* Flow can be confusing. Here is the logic:

* 1) Make all attempts to open resource IF it exists

* - If it exists as a file, open as file (r/w)

* - If not a file, it may still be accessable as a stream (r)

* (env will handle security checks).

* 2) If it doesn't exist, allow it to be opened/created

*

* Now, the way this is done below is:

* a) If the file does NOT exist, attempt to open as a stream (r)

* b) Open named file (opens existing file, creates if not avail).

*/

/*

* Use the WEB-INF directory

* (so the config files can't get snooped by a browser)

*/

String appWebInfPath = "/WEB-INF";

//由于部署方式变更为jar部署,此处不可以使用改方式获取路径

// ServletContext ctx = cfg.getServletContext();

// String realWebInfPath = ctx.getRealPath(appWebInfPath);

FileProvider config = null;

String realWebInfPath = EngineConfigurationFactoryServlet.class.getResource(appWebInfPath).getPath();

/**

* If path/file doesn't exist, it may still be accessible

* as a resource-stream (i.e. it may be packaged in a JAR

* or WAR file).

*/

InputStream iss = ClassUtils.getResourceAsStream(EngineConfigurationFactoryServlet.class, appWebInfPath+"/" + SERVER_CONFIG_FILE);

if (iss != null) {

// FileProvider assumes responsibility for 'is':

// do NOT call is.close().

config = new FileProvider(iss);

}

if (config == null) {

log.error(Messages.getMessage("servletEngineWebInfError03", ""));

}

/**

* Couldn't get data OR file does exist.

* If we have a path, then attempt to either open

* the existing file, or create an (empty) file.

*/

if (config == null && realWebInfPath != null) {

try {

config = new FileProvider(realWebInfPath, configFile);

} catch (ConfigurationException e) {

log.error(Messages.getMessage("servletEngineWebInfError00"), e);

}

}

/**

* Fall back to config file packaged with AxisEngine

*/

if (config == null) {

log.warn(Messages.getMessage("servletEngineWebInfWarn00"));

try {

InputStream is =

ClassUtils.getResourceAsStream(AxisServer.class,

SERVER_CONFIG_FILE);

config = new FileProvider(is);

} catch (Exception e) {

log.error(Messages.getMessage("servletEngineWebInfError02"), e);

}

}

return config;

}

}

2.4 创建资源文件

在WEB-INF下面创建server-config.wdd文件

剩下的就是开发对应的接口了。我在这就不多写了, 和我们平时开发service 接口和实现相同。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值