SOAP-связь без Tomcat или Axis - PullRequest
       3

SOAP-связь без Tomcat или Axis

0 голосов
/ 14 декабря 2010

Здравствуйте, прежде всего, извините за мой плохой английский.

Я занимаюсь разработкой с Eclipse.В качестве целевой платформы я использую по умолчанию меч-рыбу.Я хочу использовать SOAP в качестве протокола, но без набора exta, такого как Tomcat.У меня есть записать файлы WSDL.С помощью Swordfish я создал провайдера и потребителя.Это отлично работает для первого.Но по прошествии некоторого времени protocollinterface является нулевым, потому что сеанс недопустим.Рыба-меч делает все соединения полностью автоматическими, и я не нашел, как я могу подключиться к моему Интерфейсу вручную.(Рыба-меч с использованием OSGI) Как мне повторить попытку подключения вручную?

вот код, который будет полезен

import java.util.Timer;
import java.util.TimerTask;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.Assert;
import org.iecimpl.serverserverprotocoll.ServerServerProtocoll;

public class ServerServerProtocollClientInvoker implements InitializingBean {
  private static final Log LOG = LogFactory.getLog(ServerServerProtocollClientInvoker.class);
 private Integer delayBeforeSending = 5000;
 private ServerServerProtocoll serverServerProtocoll;
 public ServerServerProtocoll getServerServerProtocoll() {
  return serverServerProtocoll;
 }

 public void setServerServerProtocoll(ServerServerProtocoll serverServerProtocoll) {
  this.serverServerProtocoll = serverServerProtocoll;
 }

 public Integer getDelayBeforeSending() {
  return delayBeforeSending;
 }

 public void setDelayBeforeSending(Integer delayBeforeSending) {
  this.delayBeforeSending = delayBeforeSending;
 }

 public void afterPropertiesSet() throws Exception {
  Assert.notNull(serverServerProtocoll);
   Timer timer = new Timer();
        timer.schedule(new TimerTask() {
             @Override
             public void run() {
                 try {
                     performRequest();
                 } catch (Exception ex) {
                     throw new RuntimeException(ex);
                 }
             }


         }, delayBeforeSending);
     }
 private void performRequest() {
  LOG.info("Performing invocation on ...");
  /*Implementation*/ 
  clienttest.testclienttest(serverServerProtocoll);
  LOG.info("Result of runing is....");
 }
}

xml файл:

xml under META-INF/spring/jaxws-consumer.xml
<?xml version="1.0" encoding="UTF-8"?>

<!--
Copyright (c) 2008, 2009 SOPERA GmbH.
All rights reserved. This program and the accompanying materials
are made available under the terms of the Eclipse Public License v1.0
which accompanies this distribution, and is available at
http://www.eclipse.org/legal/epl-v10.html

Contributors:
    SOPERA GmbH - initial API and implementation
 -->

<spring:beans xmlns:spring="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:osgi="http://www.springframework.org/schema/osgi"
   xmlns:camel-osgi="ht_tp://activemq.apache.org/camel/schema/osgi"
   xmlns:http="http://servicemix.apache.org/http/1.0"
   xmlns:jaxws="http://cxf.apache.org/jaxws"
   xsi:schemaLocation="
   http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
   http://www.springframework.org/schema/osgi  http://www.springframework.org/schema/osgi/spring-osgi.xsd
   http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
   http://servicemix.apache.org/http/1.0 http://servicemix.apache.org/http/1.0/servicemix-http.xsd"
   xmlns:serviceNamespace="ht_tp://www.IECImpl.org/ServerServerProtocoll/"
   xmlns="ht-tp://www.IECImpl.org/ServerServerProtocoll/">       

<spring:import resource="classpath:META-INF/cxf/cxf.xml" />
<spring:import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<spring:import resource="classpath:META-INF/org/eclipse/swordfish/plugins/cxf/support/nmr-transport.xml" />

<jaxws:client id="ServerServerProtocollClient"
              serviceClass="org.iecimpl.serverserverprotocoll.ServerServerProtocoll"
              serviceName="serviceNamespace:ServerServerProtocoll"
              address="nmr:ServerServerProtocoll" />
<spring:bean class="org.iecimpl.serverserverprotocoll.sample.ServerServerProtocollClientInvoker">
 <spring:property name="serverServerProtocoll" ref="ServerServerProtocollClient"/>
</spring:bean>      


<spring:bean class="org.apache.servicemix.common.osgi.EndpointExporter" /> 

<http:endpoint endpoint="cxfEndpointHttpProvider"                 
             service="serviceNamespace:ServerServerProtocoll"
             locationURI="http://localhost:1001/EnergyServer"
             soap="true"
             role="provider"/>

все данные определены, но я новичок в этой области.

1 Ответ

1 голос
/ 10 февраля 2011

Интересно, почему бы вам "потерять" значение serverServerProtocoll ???Из кода, который вы разместили, это не ясно.Если значение «внезапно» становится нулевым, должно быть присвоение, которое делает это ...

Вы можете попробовать этот обходной путь: поскольку Swordfish внутренне использует CXF, вы можете просто создать org.apache.cxf.jaxws.JaxWsProxyFactoryBean внутри своей потребительской пружиныконфигурации.

Когда вам нужен клиент для вашей службы, вы можете создать его, используя фабричный компонент, определенный в контексте приложения Spring.

См .: Настройка клиента Spring (вариант 2)

...