2017-01-30 21 views
1

我試圖使用WS02 ESB 5.0調用Web服務每15秒,所以我有這樣的任務:運行時錯誤5.0

<?xml version="1.0" encoding="UTF-8"?> 
<task class="org.apache.synapse.startup.tasks.MessageInjector" 
group="synapse.simple.quartz" name="UpdateName" xmlns="http://ws.apache.org/ns/synapse"> 
<trigger cron="0/15 * * * * ?" /> 
<property name="message" 
xmlns:task="http://www.wso2.org/products/wso2commons/tasks"> 
<def:login soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:def="http://DefaultNamespace" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<id xsi:type="xsd:string">usr</id> 
<pw xsi:type="xsd:string">pwd</pw> 
</def:login> 
</property> 
<property name="sequenceName" value="main" 
xmlns:task="http://www.wso2.org/products/wso2commons/tasks" /> 
<property name="injectTo" value="sequence" 
xmlns:task="http://www.wso2.org/products/wso2commons/tasks" /> 
</task> 

而這個序列:

<?xml version="1.0" encoding="UTF-8"?> 
<sequence name="main" xmlns="http://ws.apache.org/ns/synapse"> 
<in> 
<send> 
<endpoint> 
<wsdl port="SakaiLogin" service="SakaiLoginService" trace="disable" 
uri="http://myserver/sakai-axis/SakaiLogin.jws?wsdl" /> 
</endpoint> 
</send> 
</in> 
<out> 
<send /> 
</out> 
<log level="full" /> 
</sequence> 

這兩個都來自文檔中顯示的示例: https://docs.wso2.com/display/ESB500/Adding+and+Scheduling+Tasks(請參閱「將消息注入到已命名的序列或代理服務」)。 https://docs.wso2.com/display/ESB500/Sample+56:+Using+a+WSDL+Endpoint+as+the+Target+Endpoint(請參閱「構建樣本」)。

不過,我得到這個錯誤,一旦我開始碳WSO2 ESB服務器:

[2017-01-27 17:03:45,005] ERROR - InMediator Runtime error occurred while mediating the message 
java.lang.NullPointerException 
     at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.isTransportSwitching(Axis2SynapseEnvironment.java:783) 
     at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:545) 
     at org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:382) 
     at org.apache.synapse.endpoints.WSDLEndpoint.send(WSDLEndpoint.java:75) 
     at org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:121) 
     at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:97) 
     at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:59) 
     at org.apache.synapse.mediators.filters.InMediator.mediate(InMediator.java:74) 
     at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:97) 
     at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:59) 
     at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158) 
     at org.apache.synapse.mediators.MediatorWorker.run(MediatorWorker.java:80) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:744) 
[2017-01-27 17:03:45,023] INFO - LogMediator To: , 
MessageID: urn:uuid:097fb69e-6461-428e-ac85-93cfde65d02e, 
Direction: request, 
MESSAGE = Executing default 'fault' sequence, 
ERROR_CODE = 0, 
ERROR_MESSAGE = Runtime error occurred while mediating the message, Envelope: 



<?xml version='1.0' encoding='utf-8'?> 
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"> 
<soapenv:Body> 
<def:login xmlns:def="http://DefaultNamespace"   xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
<id xmlns="http://ws.apache.org/ns/synapse" xsi:type="xsd:string">usr</id> 
<pw xmlns="http://ws.apache.org/ns/synapse" xsi:type="xsd:string">pwd</pw> 
</def:login></soapenv:Body></soapenv:Envelope> 

任何人都可以給我發生了什麼事的線索? 非常感謝!

回答

2

在WSDL端點的URI值必須是WSDL地址,而不是服務端點:

WSDL URI The URI of the WSDL. Click Test to test the URI. 

所以,發送中介內部的WSDL端點提取從WSDL文檔使用該服務的服務端點端口名稱以在wsdl文檔中找到它。

更新1:

我的任務配置XML:

<?xml version="1.0" encoding="UTF-8"?> 
<task xmlns="http://ws.apache.org/ns/synapse" 
     name="UpdateName" 
     class="org.apache.synapse.startup.tasks.MessageInjector" 
     group="synapse.simple.quartz"> 
    <trigger cron="0/15 * * * * ?"/> 
    <property name="proxyName" value="testTask"/> 
    <property name="message"> 
     <moc:QRY_SELECT_SRH_EMPLEADO xmlns:moc="http://www.example.org/mockWS/"> 
     <INT_ID>gero et</INT_ID> 
     </moc:QRY_SELECT_SRH_EMPLEADO> 
    </property> 
    <property name="soapAction" 
      value="http://www.example.org/mockWS/QRY_SELECT_SRH_EMPLEADO"/> 
    <property name="injectTo" value="proxy"/> 
</task> 

我的序列命名MAIN1:

<?xml version="1.0" encoding="UTF-8"?> 
<sequence xmlns="http://ws.apache.org/ns/synapse" name="main1"> 
    <in> 
     <header name="Action" scope="default" value="http://www.example.org/mockWS/QRY_SELECT_SRH_EMPLEADO"/> 
     <send> 
     <endpoint> 
      <wsdl service="mockWS" 
        port="mockWSSOAP" 
        uri="http://localhost:8088/mockmockWSSOAP?wsdl"/> 
     </endpoint> 
     </send> 
    </in> 
    <out> 
    <log level="full"/> 
<drop/> 
    </out> 
</sequence> 

最後,我創建了相同的邏輯,因爲一個問題的代理與一個序列內的下降介體:

<?xml version="1.0" encoding="UTF-8"?> 
<proxy xmlns="http://ws.apache.org/ns/synapse" 
     name="testTask" 
     transports="https http" 
     startOnLoad="true"> 
    <target> 
     <inSequence> 
     <header name="Action" scope="default" value="http://www.example.org/mockWS/QRY_SELECT_SRH_EMPLEADO"/> 
     <send> 
     <endpoint> 
      <wsdl service="mockWS" 
        port="mockWSSOAP" 
        uri="http://localhost:8088/mockmockWSSOAP?wsdl"/> 
     </endpoint> 
     </send> 
     </inSequence> 
     <outSequence> 
     <log level="full"/> 
     <drop/> 
     </outSequence> 
     <faultSequence/> 
    </target> 
</proxy> 
+0

我還是沒有看到區別。你能再解釋一下嗎?例如,我試圖從這個Web服務調用「登錄」操作(它有參數):[https://qa10-mysql.nightly.sakaiproject.org/sakai-axis/SakaiLogin.jws?wsdl]( https://qa10-mysql.nightly.sakaiproject.org/sakai-axis/SakaiLogin.jws?wsdl)。我如何設置端口,服務和uri? –

+0

您的端口和服務名稱是正確的,但您在配置中使用的URI是:http://myserver/sakai-axis/SakaiLogin.jws,必須是http://myserver/sakai-axis/SakaiLogin.jws?wsdl ....最後看到?wsdl。 –

+0

它沒有工作。由於NullPointerException,我仍然得到相同的InMediator運行時錯誤。 –