- 论坛徽章:
- 0
|
0. 数据库!<br> bpel使用哪个数据库是在deploy的时候指定的.<br> 但是实际数据库中表的生成是在jboss启动的过程中创建的.<br> 因此要想在mysql中部署bpel,首先需要在mysql中手工创建riftsaw数据库, 否则就会无法连接,当然表的创建就无法成功!<br><br>1. 首次错误为:<br>Failed to invoke BPEL process: Unable to find operation for element {http://eclipse.org/bpel/bpel}process<br>修改:在soap:binding style="rpc"字段修改style为"rpc"原来为document.<br>然后错误为:<br>>Failed to invoke BPEL process: Expected part wrapper 'process'missing on service:{http://eclipse.org/bpel/bpel}first_bpel/first_bpelPort<br>再次修改了另一个rpc,但是整个程序出错!<br><br>1. soap:binding style="rpc"是必须的.<br><br>2. soap:body中的namespace是必须的.该namespace值必须与message类型所定义的namespace.(而eclipse自动生成的部分没有该内容)<br>有了这两个后好像可以调用了!<br>但是还继续报错! 不知道还少什么!<br><br>现在的错误如下:<br><br>Failed to invoke BPEL process: Expected part wrapper '{http://schemas.xmlsoap.org/wsdl/}process' missing on service:{http://eclipse.org/bpel/bpel}HelloWorld/HelloWorldPort<br><br><br>3. 修改了<br> <message name="HelloWorldRequestMessage"><br> <part name="payload" element="xsd:string"/><br> </message><br>字段中的element为type<br><br><br>4. 复杂类型的传递:<br> <element name="SendHello_BPELRequest"><br> <complexType><br> <sequence><br> <element name="input" type="string"/><br> </sequence><br> </complexType><br> </element><br> <message name="SendHello_BPELRequestMessage"><br> <part name="payload" element="tns:SendHello_BPELRequest"/><br> </message><br> <portType name="SendHello_BPEL"><br> <operation name="process"><br> <input message="tns:SendHello_BPELRequestMessage" /><br> <output message="tns:SendHello_BPELResponseMessage"/><br> </operation><br> </portType> <br><br>对于该类型,应该如下写soap:<br><soapenv:Body><br> <wsdl:process><br> <payload><br> <wsdl:SendHello_BPELRequest> <br> <wsdl:input>wanjmdddd</wsdl:input><br> </wsdl:SendHello_BPELRequest><br> </payload><br> </wsdl:process><br></soapenv:Body><br>此处的wsdl定义为上面的SendHello_BPELRequest所在的namespace<br><br>变量为了能够成功使用query2.0语言访问,需要先初始化.<br>示例如下:<br> <bpel:copy><br> <bpel:from><br> <bpel:literal><br> <tns:test_bpelResponse<br> xmlns:tns="http://sample.bpel.org/bpel/sample"<br> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><br> <tns:result>fffff</tns:result><br> </tns:test_bpelResponse><br> </bpel:literal><br> </bpel:from><br> <bpel:to variable="output" part="payload"></bpel:to><br> </bpel:copy><br>其中out是tns:test_bpelResponseMessage类型.test_bpelResponseMessage的定义为:<br> <message name="test_bpelRequestMessage"><br> <part name="payload" element="tns:test_bpelRequest"/><br> </message><br>test_bpelRequst的定义为:<br> <element name="test_bpelRequest"><br> <complexType><br> <sequence><br> <element name="input" type="string"/><br> </sequence><br> </complexType><br> </element><br><br><br>bpel中的style="rpc|document"<br>这定义最后发送请求时报文的封装格式.<br>当其等于rpc时:本文需要封装在 操作名 为element的元素中.<br>而当document时. 则只要是消息封装就可以了,详细情况请搜索the difference between rpc 和document.<br>所以在引用另外一个wsdl时,请不要修改其中的style. 这个bpel引擎会自动去调用.而从应用过程中来看,jboss的bpel只支持rpc格式!.<br><br><br>今天重新试了一下, jboss的bpel也是支持document格式的.只是只要对消息进行封装就可以了.此时不需要namespace和style的修改.<br>对于上面的复杂结构, 只需要写为:<br><soapenv:Body><br> <wsdl:SendHello_BPELRequest> <br> <<font color="#F00000">wsdl:</font>input>wanjmdddd</<font color="#F00000">wsdl:</font>input> (调用bpel是需要红字,而调用wsdl则不要)<br> </wsdl:SendHello_BPELRequest><br></soapenv:Body><br><br>也就是说在rpc时, 需要在消息的外面在封装上<process_name><part_name>.其他的相同.<br><br>此处还有一个奇怪的发现就是.<br>理论上调用bpel和调用wsdl的一个operation, 报文的格式应该是相同的.但是通过测试发现.<br>对于上面的报文如果是调用wsdl的话.input前后的wsdl应该去掉, 否则jboss会报错.奇怪同样的一个程序,怎么会进行不同的处理. <br>经测试发现, bpel主动调用bpel时, 采用<input xmlns=''>的形式出现.<br><br>其实在recv那一步, 引擎只做最外层的解析. 对于里面的元素是否合法(拿上面的报文为例,此时并不检查<wsdl:input>部分是否合法). 并不做检查.只有等到下面在继续访问的时候,才会发现问题.<br> |
|