0

我想使用 Apache Axis 在 Jax-RPC 中创建一个简单的 Web 服务。

我也想实现它的春天性质。

我是 Jax-RPC 的新手,可以分享一些参考资料。

谢谢。

4

2 回答 2

0

请查看 spring 提供的文档:

http://static.springsource.org/spring/docs/2.5.x/reference/remoting.html

于 2013-02-13T04:33:55.653 回答
-1

Apache Axis并且JAX-RPC是用于创建 Web 服务的独立框架。没有人能回答你的问题,因为没有正确的答案。我能做的只是给你一些入门链接,这样你就可以更好地理解什么是 JAX-RPC 和 Apache Axis。

看:

从您之前与此相关的所有问题中,我假设您需要支持rpc/encodedWSDL 样式。好吧,JAX-RPC 和 Axis 会做到这一点。不知道如何通过JAX-RPC但这是一些提示如何使用 Axis 和 Spring 执行此操作:

创建两个类:

import org.apache.axis.EngineConfiguration;
import org.apache.axis.Handler;
import org.apache.axis.deployment.wsdd.WSDDProvider;
import org.apache.axis.deployment.wsdd.WSDDService;

public class WSDDSpringProvider extends WSDDProvider {

    public static final String PROVIDER_NAME = "SPRING";
    public static final String PARAM_SPRING_BEAN_ID = "springBeanId";

    public String getName(){
        return "SPRING";
    }

    public Handler newProviderInstance(WSDDService service, EngineConfiguration registry)
        throws Exception {
        return new SpringProvider(service.getParameter("springBeanId"));
    }

}

还有一个:

import java.io.PrintStream;
import java.lang.reflect.Method;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import org.apache.axis.MessageContext;
import org.apache.axis.providers.java.RPCProvider;
import org.apache.axis.transport.http.HTTPConstants;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

public class SpringProvider extends RPCProvider {

    private String springBeanId;

    public SpringProvider(String springBeanId) {
        this.springBeanId = springBeanId;
    }

    protected Object makeNewServiceObject(MessageContext msgContext, String clsName)
        throws Exception {
        Servlet servlet = (Servlet)msgContext.getProperty(HTTPConstants.MC_HTTP_SERVLET);
        WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servlet.getServletConfig().getServletContext());
        return wac.getBean(springBeanId);
    }

    protected Object invokeMethod(MessageContext msgContext, Method method, Object obj, Object argValues[])
        throws Exception {
        Method proxyMethod = obj.getClass().getMethod(method.getName(), method.getParameterTypes());
        return proxyMethod.invoke(obj, argValues);
    }

}

将它们作为一个.jar文件并将其放入您的类路径中。这些类是您的 Axis Web 服务的实现类可以作为 Spring bean 公开的处理程序。

Axis WSDD文件java:SPRING中为要公开为 Spring bean 的 Web 服务配置提供程序。定义参数的唯一值springBeanId。例如(来自 WSDD 文件):

<ns:service name="TestService" provider="java:SPRING" use="literal">
   <ns:parameter name="springBeanId" value="webServiceImpl" />
   <!-- ... -->
</ns:service>

在 中将您的 Web 服务实现定义为 Spring bean WEB-INF/applicationContext.xml,例如:

<bean id="webServiceImpl" class="your.pkg.WebServiceImpl">
</bean>

在这些步骤之后,您可以将您的 Web 服务实现类用作常见的 Spring bean。

于 2013-02-13T09:05:46.597 回答