[SPRING] Apache Camel 및 웹 서비스
SPRINGApache Camel 및 웹 서비스
Apache Camel을 WSDL을 제공하는 웹 서비스와 통합하여 클래스를 생성 한 후 나중에 메소드를 호출하여 일부 요청을 리턴하는 방법을 이해하려고합니다.
나는 camel-spring-ws와 camel-cxf 패키지에 대해 조금 공부했습니다. Spring Web Services Component는 WSDL 사용을 지원하지 않지만 CXF는 지원하지만 CXF에서 호스트되는 JAX-WS 서비스와의 연결 만 지원합니다.
고객으로부터 WSDL을 받으면 CXF를 사용할 수 있습니까? 또는 자신의 메서드를 사용하기 위해 사용자 지정 구성 요소를 만들어야합니까?
지금까지 내가 구현할 수있는 가장 간단한 방법은 원격 웹 서비스를 호출하는 Process 또는 Bean을 만드는 것입니다.
원격 웹 서비스를 호출하기 위해 제작자를 구현하려고했습니다. 내 beans.xml :
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:camel="http://camel.apache.org/schema/spring"
xmlns:cxf="http://camel.apache.org/schema/cxf"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml"/>
<cxf:cxfEndpoint
id="osvEndpoint"
address="http://10.193.1.90:8767/"
serviceClass="siemens_hiq8000.SiemensHiq8000PortType"/>
<bean id="osvWebServiceProcessor" class="br.com.willianantunes.processor.OsvWebServiceProcessor" />
</beans>
내 경로 :
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:camel="http://camel.apache.org/schema/spring"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<routeContext id="osvWebServiceInvoke" xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="quartz2://test?cron=0/10+*+*+*+*+?"/>
<process ref="osvWebServiceProcessor" />
<to uri="cxf:bean:osvEndpoint"/>
<to uri="log:live?level=INFO" />
</route>
</routeContext>
</beans>
그리고 내 프로세서 :
public class OsvWebServiceProcessor implements Processor
{
@Override
public void process(Exchange exchange) throws Exception
{
Message inMessage = exchange.getIn();
// The method to be called
inMessage.setHeader(CxfConstants.OPERATION_NAME, "getVersion");
// Parameters to be passed into the web service
List<Object> params = new ArrayList<Object>();
ResultCodeStructHolder resultCodeStructHolder = new ResultCodeStructHolder();
VersionDataHolder versionDataHolder = new VersionDataHolder();
params.add(resultCodeStructHolder);
params.add(versionDataHolder);
inMessage.setBody(params);
}
}
getVersion 메소드에는 다음과 같은 몇 가지 매개 변수가 필요합니다.
public void getVersion(siemens_hiq8000.holders.ResultCodeStructHolder result,
siemens_hiq8000.holders.VersionDataHolder versionData) throws java.rmi.RemoteException;
어떻게 그들을 전달할 수 있습니까? 이 소지자는 웹 서비스의 응답으로 채워야합니다. 내 프로젝트를 실행할 때 다음과 같은 오류가 발생합니다.
[main] INFO org.apache.cxf.service.factory.ReflectionServiceFactoryBean - Creating Service {http://siemens_hiq8000/}SiemensHiq8000PortType from class siemens_hiq8000.SiemensHiq8000PortType
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.cxf.wsdl11.WSDLEndpointFactory.createEndpointInfo(Lorg/apache/cxf/service/model/ServiceInfo;Lorg/apache/cxf/service/model/BindingInfo;Ljava/util/List;)Lorg/apache/cxf/service/model/EndpointInfo;
at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpointInfo(AbstractWSDLBasedEndpointFactory.java:287)
at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:144)
at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:91)
at org.apache.camel.component.cxf.CxfSpringEndpoint.createClient(CxfSpringEndpoint.java:116)
at org.apache.camel.component.cxf.CxfProducer.doStart(CxfProducer.java:76)
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
at org.apache.camel.impl.DefaultCamelContext.startService(DefaultCamelContext.java:2869)
at org.apache.camel.impl.DefaultCamelContext.doAddService(DefaultCamelContext.java:1097)
at org.apache.camel.impl.DefaultCamelContext.addService(DefaultCamelContext.java:1058)
at org.apache.camel.impl.ProducerCache.doGetProducer(ProducerCache.java:405)
at org.apache.camel.impl.ProducerCache.acquireProducer(ProducerCache.java:123)
at org.apache.camel.processor.SendProcessor.doStart(SendProcessor.java:219)
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:74)
at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:59)
at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:103)
at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:89)
at org.apache.camel.processor.DelegateAsyncProcessor.doStart(DelegateAsyncProcessor.java:79)
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:74)
at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:59)
at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:103)
at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:89)
at org.apache.camel.processor.RedeliveryErrorHandler.doStart(RedeliveryErrorHandler.java:1272)
at org.apache.camel.support.ChildServiceSupport.start(ChildServiceSupport.java:44)
at org.apache.camel.support.ChildServiceSupport.start(ChildServiceSupport.java:31)
at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:74)
at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:59)
at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:103)
at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:89)
at org.apache.camel.processor.interceptor.DefaultChannel.doStart(DefaultChannel.java:153)
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:74)
at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:59)
at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:103)
at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:61)
at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:103)
at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:89)
at org.apache.camel.processor.MulticastProcessor.doStart(MulticastProcessor.java:1060)
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:74)
at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:59)
at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:103)
at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:89)
at org.apache.camel.processor.DelegateAsyncProcessor.doStart(DelegateAsyncProcessor.java:79)
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:74)
at org.apache.camel.impl.RouteService.startChildService(RouteService.java:340)
at org.apache.camel.impl.RouteService.warmUp(RouteService.java:182)
at org.apache.camel.impl.DefaultCamelContext.doWarmUpRoutes(DefaultCamelContext.java:3090)
at org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:3020)
at org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:2797)
at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:2653)
at org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:167)
at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2467)
at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2463)
at org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:2486)
at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:2463)
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:2432)
at org.apache.camel.spring.SpringCamelContext.maybeStart(SpringCamelContext.java:255)
at org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:121)
at org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:332)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:151)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:128)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:331)
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:773)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:483)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
at org.apache.camel.spring.Main.createDefaultApplicationContext(Main.java:216)
at org.apache.camel.spring.Main.doStart(Main.java:156)
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
at org.apache.camel.main.MainSupport.run(MainSupport.java:150)
at br.com.willianantunes.test.Program.main(Program.java:12)
낙타 cxf가 제작자처럼 행동하기를 원하는 사람들은 다음 단계를 따르십시오.
wsdl2java -client -d "TargetFolderHere"-autoNameResolution "OpenScape-Voice_V8.00.28.01.wsdl"
그리고 로그는 다음을 인쇄합니다.
- Quartz scheduler 'DefaultQuartzScheduler-main-application' initialized from an externally provided properties instance.
- Quartz scheduler version: 2.2.1
- Job Camel_main-application.test (triggerType=CronTriggerImpl, jobClass=CamelJob) is scheduled. Next fire date is Tue Mar 31 09:12:00 BRT 2015
- AllowUseOriginalMessage is enabled. If access to the original message is not needed, then its recommended to turn this option off as it may improve performance.
- StreamCaching is not in use. If using streams then its recommended to enable stream caching. See more details at http://camel.apache.org/stream-caching.html
- Creating Service {urn:openscape-voice}openscape_voice from WSDL: OpenScape-Voice_V8.00.28.01.wsdl
- Could not find endpoint/port for {urn:openscape-voice}openscape_voicePortTypePort in wsdl. Using {urn:openscape-voice}openscape_voice.
- Route: route1 started and consuming from: Endpoint[quartz2://test?cron=0%2F10+*+*+*+*+%3F]
- Starting scheduler.
- Scheduler DefaultQuartzScheduler-main-application_$_NON_CLUSTERED started.
- Total 1 routes, of which 1 is started.
- Apache Camel 2.15.0 (CamelContext: main-application) started in 10.759 seconds
- Exchange[ExchangePattern: InOnly, BodyType: org.apache.cxf.message.MessageContentsList, Body: [null, javax.xml.ws.Holder@508696f5, javax.xml.ws.Holder@333cf1ba]]
CXF 종속성에 몇 가지 문제점이 있었으므로 여기에 내 pom.xml이 있습니다.
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-cxf</artifactId>
<version>${camel-version}</version>
</dependency>
<!-- Apache CXF -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-bindings-soap</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
</dependency>
<!-- End of Apache CXF -->
새로운 프로세서 나 빈을 디자인하여 SOAP 메시지가 아닌 순수한 SOAP 메시지 인 본문 메시지를 얻을 수있다. 그러나 POJO는 웹 서비스에서 사용된다.
@ am 비어 어인이 제공 한 대답은 OK이며 내 목적에도 부합 할 수 있습니다.
해결법
-
==============================
1.웹 서비스의 첫 번째 또는 하향식 개발 계약을 언급하고 있습니다. 이 접근법에서는 WSDL 정의에서 스텁 코드를 생성하고 개발시 이러한 클래스 등을 사용합니다. 필자는이 작업을 많이했으며 닷넷, 자바, PHP 및 델파이 (Delphi는 WSI 규격을 준수하지 않아도 작동하지 않음)에서 생성 된 서비스의 WSDL을 사용했습니다.
웹 서비스의 첫 번째 또는 하향식 개발 계약을 언급하고 있습니다. 이 접근법에서는 WSDL 정의에서 스텁 코드를 생성하고 개발시 이러한 클래스 등을 사용합니다. 필자는이 작업을 많이했으며 닷넷, 자바, PHP 및 델파이 (Delphi는 WSI 규격을 준수하지 않아도 작동하지 않음)에서 생성 된 서비스의 WSDL을 사용했습니다.
CXF는 라이브러리를 가리킬 수있는 모든 WSDL로부터 클래스를 생성합니다. 우선 Maven POM 파일에 항목을 추가하여 Maven에게 WSDL의 클래스를 생성하도록 지시해야한다.
POM 파일에 다음을 추가하십시오.
<plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</artifactId> <version>get the latest version or the version you want</version> <executions> <execution> <id>generate-sources</id> <phase>generate-sources</phase> <configuration> <sourceRoot> ${basedir}/target/generated/src/main/java </sourceRoot> <wsdlOptions> <wsdlOption> <wsdl> URI/FILE PATH OF WSDL HERE </wsdl> <extraargs> <extraarg>-impl</extraarg> <-- use this if you want to implement the service i.e. create it <extraarg>-client</extraarg> <-- us this if you want to generate a client for the service. </extraargs> </wsdlOption> </wsdlOptions> </configuration> <goals> <goal>wsdl2java</goal> </goals> </execution> </executions> </plugin>
이제이 파일을 사용하기 위해 필요한 스텁 클래스를 생성하기 위해 maven goal mvn generate-source를 실행시킬 수 있습니다.
나는 보통 생산 또는 소비하는 대부분의 웹 서비스가 다소 복잡한 데이터 구조를 가지기 때문에 실제 구현을 수행하기 위해 프로세서 / 빈에 포함시킨다. 그러나 이것은 실제로 서비스에 달려 있습니다.
간단히 말해서 CXF를 사용하여 거의 (Delphi guys는 듣고 있습니까?) 웹 서비스에서 스텁 클래스를 생성 한 다음 프로세서에서 이러한 생성 된 클래스를 사용하여 클라이언트 및 서버를 구현할 수 있습니다.
최신 정보:
위의 예를 기반으로 올바른 방향으로 가고 있습니다. 우선 중요한 개념 인 낙타에서 CXF에 관해 논의하고 싶습니다. 다음 코드를 볼 때 CXF 빈은 다른 빈과 약간 다릅니다.
<from uri="file://....."/> <to uri="mock"/>
파일 구성 요소는 결국 파일을 생성하는 생산자이며 모의 구성 요소는 파일 구성 요소에서 생성 한 데이터를 취하여 작업을 수행하는 데 소비하므로 소비자입니다.
웹 서비스는이 개념을 약간 왜곡합니다. 다음과 같은 경로가있을 때 :
cxf bean은 웹 서비스를 호출 할 때 프로듀서라고합니다. 소비자 또는 경로의
부분에서 cxf bean을 사용할 때 흥미 롭습니다. 다음은 웹 서비스 소비자의 예입니다.
<from uri="cxf:bean:someService" />
CXF 빈은 웹 서비스 호출을 소비 한 다음 여러 다른 부분으로 메시지를 보냅니다. 이를 통해 FTP 서버에서 파일을 다운로드하고 JDBC 호출로 내용을 풍부하게 한 다음 웹 시스템으로 SAP 시스템에 대해 강화 된 데이터를 처리하는 등 매우 복잡한 작업을 노출 할 수 있습니다. 귀하의 경로는
의 cxf 빈을 서비스로서 노출시키고 나머지 경로는 모든 통합을 수행 할 수 있지만 웹 서비스로 공개됩니다. 아주 강력한 개념. 귀하의 경우 웹 서비스 빈은 제작자 또는 클라이언트입니다. 나는 소비하는 te 서비스가 다소 복잡 할 수 있기 때문에 일반적으로 클라이언트 용 cxf beans를 사용하지 않으며 이러한 경우를 처리하기 위해 Java의 모든 기능이 필요합니다. 그래서 나는 이렇게하는 법을 보여줄 것입니다.
그래서 제 세상에서 나는 다음의 낙타 루트를 할 것입니다 :
<routeContext id="osvWebServiceInvoke" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="quartz2://test?cron=0/10+*+*+*+*+?"/> <process ref="osvWebServiceProcessor" /> <to uri="log:live?level=INFO" /> </route> </routeContext>
내 프로세서 빈은 다음과 같이 바뀔 것이다.
public class OsvWebServiceProcessor implements Processor { @Override public void process(Exchange exchange) throws Exception { Message inMessage = exchange.getIn(); /* SInce i dont have access to the WSDL and XSD I cant say how the following code will look but essentially you would need to call the web-service here in Java code and get the result back. */ outSOAPMsg= siemens_hiq8000.SiemensHiq8000PortType.OperationName(inSOAPMsg) //set the reply into the inbody and send onto other components for processing. inMessage.setBody(outSOAPMsg); } }
귀하의 코드를 보면 스텁 클래스가 올바르게 생성되지 않은 것으로 나타났습니다. 내 게시물에 설명 된 항목을 POM 파일에 추가 할 것을 강력히 권합니다. WSDL 및 XSD 파일 중 일부를 게시 할 수 있다면 더 자세한 설명을 제공 할 수 있습니다.
-
==============================
2.나의 주요 책임 중 하나는 낙타를 클라이언트로 사용하여 다른 웹 서비스를 사용하는 것입니다. 이것은 내가 일반적으로 사용하는 접근 방식이며, 매번 매력과 같이 작동하는 어떤 문제에도 결코 빠지지 않았습니다.
나의 주요 책임 중 하나는 낙타를 클라이언트로 사용하여 다른 웹 서비스를 사용하는 것입니다. 이것은 내가 일반적으로 사용하는 접근 방식이며, 매번 매력과 같이 작동하는 어떤 문제에도 결코 빠지지 않았습니다.
1) camel-config.xml 파일에서 엔드 포인트를 정의하십시오.
< bean id = "service_name_CXFEndpoint"class = "org.apache.camel.component.cxf.CxfEndpoint"/>
2) 웹 서비스 사용 경로의 구성 파일에 정의 된 끝점을 사용합니다.
개인 문자열 CXF_SERVICE_ENDPOINT = "cxf : bean : service_name_CXFEndpoint? address = wsdl_uri_location & serviceClass = service_name_from_the_stubs & loggingFeatureEnabled = true";
서비스 이름의 경우 wsdl의 내용을 복사하여 .wsdl 파일에 붙여넣고 webservice 클라이언트를 생성해야합니다. 이렇게하려면 wsdl 파일> webservices> 클라이언트 생성을 마우스 오른쪽 버튼으로 클릭해야합니다. 그런 다음 런타임에 JbossWS를 선택해야합니다 (환경 설정에서 JbossWS를 먼저 설정해야합니다). 스텁이 생성되면 기본 서비스 클래스를 찾습니다. 그런 다음 전체 위치를 복사하십시오 (예 : com.test에있는 WebServiceClass라는 클래스는 serviceClass = com.test.WebService.class가됩니다)
3) 소비를위한 라우팅 정의 :
from("direct:web_service") .routeId("service_name") .bean(ServiceWSProcessor,"processRequest") .to(CXF_SERVICE_ENDPOINT) .bean(ServiceWSProcessor,"processResponse") .end();
이제이 프로세서에 요청을 보내면이 프로세서가 웹 서비스 끝점으로 이동하여 응답을 보냅니다.
4) 요청 응답을위한 프로세서를 작성하십시오 (이 경우 serviceWS 프로세서).
@Component(value="serviceWSProcessor") public class ServiceWSProcessor { private static final Logger LOGGER = LoggerFactory.getLogger(ServiceWSProcessor.class); public void processRequest(Exchange exchange) throws Exception { Message in = exchange.getIn(); Message out = exchange.getOut(); try { LOGGER.info("Service - START"); Request Request = in.getBody(Request.class); //This depends on your WSDL File. Test the process in SOAP UI and see how the request looks like and code //accordingly. List<Object> list = new ArrayList<Object>(); list.add(header); list.add(body); //for this, you need to check the service for what are the parameters for that method and what response its expecting. out.setHeader(CxfConstants.OPERATION_NAME, "method_name"); out.setBody(list); } catch (Exception e) { e.printStackTrace(); } } public void processResponse(Exchange exchange) throws Exception { Message in = exchange.getIn(); Message out = exchange.getOut(); try { Response response = null; //Code this based on what response you should set to the final body. check the message //contents list in debug mode to see what response you are getting. try { MessageContentsList result = (MessageContentsList) in.getBody(); if (result != null) { response = (Response)result.get(0); out.setHeader(Constants.HEADER_SERVICE_RESPONSE_SUCCESS, Constants.SERVICE_RESPONSE_SUCCESS_Y); } else { out.setHeader(Constants.HEADER_SERVICE_RESPONSE_SUCCESS, Constants.SERVICE_RESPONSE_SUCCESS_N); } } catch (Exception e) { e.printStackTrace(); out.setHeader(Constants.HEADER_SERVICE_RESPONSE_SUCCESS, Constants.SERVICE_RESPONSE_SUCCESS_N); } LOGGER.info("Service - END"); out.setBody(response)); } catch (Exception e) { LOGGER.error("Service - ERROR"); out.setBody(e.getMessage()); } } }
낙타 및 봄 ws에 필요한 종속성 목록을 보려면이 페이지를 확인하십시오.
https://github.com/gauthamhs/Java/blob/master/JavaEE/Dependencies-Important-Camel-Spring.xml
추가 도움이 필요하거나 걱정이되는 경우 알려주십시오.
안부, Gautam
from https://stackoverflow.com/questions/29276308/apache-camel-and-web-services by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring XML 메타 데이터 설정에서 빈에 대한 ServletContext 속성을 설정하는 방법 (0) | 2019.05.18 |
---|---|
[SPRING] 스프링 부트의 스택 추적을 줄일 수 있습니까? (0) | 2019.05.18 |
[SPRING] @AspectJ Spring 3.1을 기반으로 한 AOP (0) | 2019.05.18 |
[SPRING] 프로퍼티 파일의 경로를 얻고이를 런타임에 Bean에 전달하는 방법 (0) | 2019.05.18 |
[SPRING] XML에서 속성 주입이 실패합니다 (spring-ws config). (0) | 2019.05.18 |