Создание простых веб-сервисов с использованием JAX-RPC в Apache Axis

Я хочу создать простые веб-сервисы в Jax-RPC, используя Apache Axis.

Я также хочу реализовать весеннюю природу к этому.

Я новичок в Jax-RPC, может поделиться некоторыми ссылками.

Благодарю.

2 ответа

Решение

Apache Axis а также JAX-RPC должны независимые рамки для создания веб-сервисов. Никто не мог ответить на ваш вопрос, потому что нет правильного ответа на него. Что я могу сделать, так это просто дать вам несколько ссылок для начала, чтобы вы могли лучше понять, что такое JAX-RPC и Apache Axis.

Увидеть:

Из всех ваших предыдущих вопросов, связанных с этим, я предполагаю, что вам нужно поддержать rpc/encoded WSDL стиль. Ну, 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 может быть представлен как bean-компонент Spring.

В Axis WSDD настройка файла java:SPRING провайдер для веб-сервиса, который вы хотите представить как Spring bean. Определить уникальное значение для параметра springBeanId, Например (из файла WSDD):

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

Определите реализацию своего веб-сервиса как Spring bean в WEB-INF/applicationContext.xml, например:

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

После этих шагов вы сможете использовать свой класс реализации веб-сервиса как обычный компонент Spring.

Пожалуйста, ознакомьтесь с документацией, предоставленной весной:

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

Другие вопросы по тегам