2014-12-15 9 views
0

Oracle JMS 큐에서 메시지를 읽고, 웹 서비스를 호출하고 로그에서 응답을 캡처하는 Synapse 구성이 있습니다. 구성은 다음을 기준으로합니다. ws02 with oracle시냅스에서 jms 큐로 응답 보내기

다른 Oracle quueue에서 응답을 캡처하도록 구성을 확장하려고했지만 아래 오류가 발생합니다. 답장 대상 유형을 "대기열"로 지정 했음에도 불구하고 그는 여전히 대기열 세션 대신 주제 세션을 만들려고합니다.

2014-12-15 14:13:21,728 [-] [HttpClientWorker-1] ERROR JMSSender Unable to create a JMSMessageSender for : [email protected] oracle.jms.AQjmsException: JMS-107: Operation not allowed on Connection 
at oracle.jms.AQjmsError.throwEx(AQjmsError.java:334) 
at oracle.jms.AQjmsConnection.createTopicSession(AQjmsConnection.java:728) 
at org.apache.axis2.transport.jms.JMSOutTransportInfo.createJMSSender(JMSOutTransportInfo.java:365) 
at org.apache.axis2.transport.jms.JMSSender.sendMessage(JMSSender.java:121) 
at org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:119) 
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443) 

구성 :

<definitions xmlns="http://ws.apache.org/ns/synapse"> 
<proxy name="StockQuoteProxy" transports="https http jms" startOnLoad="true" trace="disable"> 
    <target> 
    <endpoint> 
    <address uri="http://localhost:9000/services/SimpleStockQuoteService" /> 
    </endpoint> 
    <inSequence> 
    <log level="full" /> 
    <enrich> 
     <source type="body" clone="true" /> 
     <target type="property" property="jms_body_text" /> 
    </enrich> 
    <property name="jms_body_text" expression="get-property('jms_body_text')" scope="default" /> 
     <xslt key="jmsMsgToSoapMsg_xslt"> 
     <property name="jms_text" expression="get-property('jms_body_text')" /> 
     </xslt> 
     <log level="full"> 
     <property name="After transformation" value="************" /> 
     </log> 
    </inSequence> 
    <outSequence> 
    <log level="full"> 
     <property name="OUT SEQUENCE" value="************" /> 
    </log> 
    <send/> 
    </outSequence> 
    </target> 

    <publishWSDL uri="file:repository/conf/sample/resources/proxy/sample_proxy_1.wsdl"/> 

    <parameter name="transport.jms.ContentType"> 
    <rules> 
    <jmsProperty>ContentType</jmsProperty> 
    <default>text/plain</default> 
    </rules> 
    </parameter> 

    <parameter name="transport.jms.Destination">cn=tro_Q_JMS1,cn=OracleDBQueues,cn=ORCL,cn=OracleContext,ou=Services, o=sgi,c=us</parameter> 
    <parameter name="transport.jms.ReplyDestinationType">queue</parameter> 
    <parameter name="transport.jms.ReplyDestination">cn=tro_Q_JMS2,cn=OracleDBQueues,cn=ORCL,cn=OracleContext,ou=Services, o=sgi,c=us</parameter> 

</proxy> 

<localEntry key="jmsMsgToSoapMsg_xslt" src="file:jmsMsgToSoapMsg.xslt" /> 

<sequence name="fault"> 
    <log level="full"> 
    <property name="MESSAGE" value="Executing default &quot;fault&quot; sequence" /> 
    <property name="ERROR_CODE" expression="get-property('ERROR_CODE')" /> 
    <property name="ERROR_MESSAGE" expression="get-property('ERROR_MESSAGE')" /> 
    </log> 
    <drop/> 
</sequence> 

<sequence name="main"> 
    <log/> 
    <drop/> 
</sequence> 
</definitions> 

답변

0

은 내가 문제를 발견 한 것 같아요. Oracle JMS가 Axis2 jms 전송 라이브러리와 호환되지 않는 것 같습니다. 대상 목적지는 항목 인터페이스를 구현하는지 주제 또는 JMS 큐, 축 먼저 확인 여부를 결정하기 위해

JMSOutTransportInfo(JMSConnectionFactory jmsConnectionFactory, Destination dest, 
     String contentTypeProperty) { 
    this.jmsConnectionFactory = jmsConnectionFactory; 
    this.destination = dest; 
    destinationType = dest instanceof Topic ? JMSConstants.DESTINATION_TYPE_TOPIC 
              : JMSConstants.DESTINATION_TYPE_QUEUE; 
    this.contentTypeProperty = contentTypeProperty; 
} 

. 문제는 Oracle 클래스가 Topic과 Queue 인터페이스 모두를 구현하는 AQjmsDestination 인 Topic과 Queue 모두에서 동일하다는 것입니다.