当前位置: 首页 > news >正文

关于partnerLinkType的相关实验

文章仅供大家参考,所有评论, 错误报告, 其他信息以及批评, 请邮寄到 Jeffery.Lee AT gmail.com 或者访问我的个人blog同我交流( http://ibuddie.spaces.live.com/ )。本文遵从GNU 的自由文档许可证(Free Document License)的条款,欢迎转载,如若修改、散布,请注明文章原始出处和来源。


关于partnerLinkType的相关实验

1 partnerLinkType的定义放到bpel定义当中去

Loan Approval为例,理想情况下partnerLinkType的定义应该放到相关服务的WSDL文件中定义,如下所示:

<wsdl:definitions

targetNamespace="http://example.com/loan-approval/wsdl/"

xmlns:ens="http://example.com/loan-approval/xsd/error-messages/"

xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype"

xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

xmlns:tns="http://example.com/loan-approval/wsdl/"

xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"

xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<wsdl:types>

……………………………………..

</wsdl:types>

<wsdl:message name="creditInformationMessage">

……………………………………..

</wsdl:message>

……………………………………..

……………………………………..

<wsdl:portType name="loanServicePT">

……………………………………..

</wsdl:portType>

……………………………………..

……………………………………..

<wsdl:binding name="SOAPBinding" type="tns:loanApprovalPT">

……………………………………..

</wsdl:binding>

<wsdl:service name="LoanApprover">

……………………………………..

</wsdl:service>

<plnk:partnerLinkType name="loanPartnerLT">

<plnk:role name="loanService" portType="tns:loanServicePT" />

</plnk:partnerLinkType>

<plnk:partnerLinkType name="loanApprovalLT">

<plnk:role name="approver" portType="tns:loanApprovalPT" />

</plnk:partnerLinkType>

<plnk:partnerLinkType name="riskAssessmentLT">

<plnk:role name="assessor" portType="tns:riskAssessmentPT" />

</plnk:partnerLinkType>

</wsdl:definitions>

partnerLinkType的相关定义放到BPEL代码中,并修改相应wsdlbpel文件的名称空间。bpel代码修改后如下:

<?xml version="1.0" encoding="UTF-8"?>

<bpel:process

xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable"

xmlns:lns="http://example.com/loan-approval/wsdl/"

xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype"

xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="loan_approval" suppressJoinFailure="yes"

targetNamespace="http://loan_approval">

<bpel:import importType="http://schemas.xmlsoap.org/wsdl/"

location="WSDL/loanServicePT.wsdl" namespace="http://example.com/loan-approval/wsdl/"/>

<plnk:partnerLinkType name="loanPartnerLT">

<plnk:role name="loanService" portType="lns:loanServicePT"/>

</plnk:partnerLinkType>

<plnk:partnerLinkType name="loanApprovalLT">

<plnk:role name="approver" portType="lns:loanApprovalPT"/>

</plnk:partnerLinkType>

<plnk:partnerLinkType name="riskAssessmentLT">

<plnk:role name="assessor" portType="lns:riskAssessmentPT"/>

</plnk:partnerLinkType>

<bpel:partnerLinks>

<bpel:partnerLink myRole="loanService" name="customer" partnerLinkType="loanPartnerLT"/>

<bpel:partnerLink name="assessor" partnerLinkType="riskAssessmentLT" partnerRole="assessor"/>

<bpel:partnerLink name="approver" partnerLinkType="loanApprovalLT" partnerRole="approver"/>

</bpel:partnerLinks>

<bpel:variables>

……………………………………..

</bpel:variables>

<bpel:faultHandlers>

……………………………………..

</bpel:faultHandlers>

<bpel:flow>

……………………………………..

……………………………………..

</bpel:flow>

</bpel:process>

将修改后的wsdlbpel文件,以及之前的pdd文件一齐打包为bpr文件,部署到BPEL引擎上运行,部署时错误信息如下:

信息: [tutorial.bpr] Starting ActiveBPEL deployment.

2007-11-20 22:09:18 org.activebpel.rt.axis.bpel.web.AeProcessEngineServlet$AeTom

catLogger logError

严重: [tutorial.bpr] META-INF\pdd\Loan_Approval\loan_approval.pdd failed deploym

ent validation. See deployment log.

2007-11-20 22:09:18 org.activebpel.rt.AeException logError

严重: META-INF\pdd\Loan_Approval\loan_approval.pdd failed deployment validation.

See deployment log.

2007-11-20 22:09:18 org.activebpel.rt.axis.bpel.web.AeProcessEngineServlet$AeTom

catLogger logInfo

信息: [tutorial.bpr] Finished ActiveBPEL deployment.

2007-11-20 22:09:18 org.activebpel.rt.axis.bpel.web.AeProcessEngineServlet$AeTom

catLogger logInfo

信息: ********** ActiveBPEL In-Memory Configuration Started

在引擎控制台查看部署日志如下:

11/20/2007 10:09:18:281 [tutorial.bpr] [error-messages.xsd] Added resource mapped to location hint: project:/Loan_Approval/WSDL/error-messages.xsd

11/20/2007 10:09:18:281 [tutorial.bpr] [loanServicePT.wsdl] Added resource mapped to location hint: project:/Loan_Approval/WSDL/loanServicePT.wsdl

11/20/2007 10:09:18:609 [tutorial.bpr] [loan_approval.pdd] Fault name lns:unableToHandleRequest can not be found.: in META-INF\pdd\Loan_Approval\loan_approval.pdd

11/20/2007 10:09:18:640 [tutorial.bpr] [loan_approval.pdd] Extension with namespace 'http://docs.oasis-open.org/wsbpel/2.0/plnktype' is not declared.: in META-INF\pdd\Loan_Approval\loan_approval.pdd

11/20/2007 10:09:18:640 [tutorial.bpr] [loan_approval.pdd] Extension with namespace 'http://docs.oasis-open.org/wsbpel/2.0/plnktype' is not declared.: in META-INF\pdd\Loan_Approval\loan_approval.pdd

11/20/2007 10:09:18:640 [tutorial.bpr] [loan_approval.pdd] Extension with namespace 'http://docs.oasis-open.org/wsbpel/2.0/plnktype' is not declared.: in META-INF\pdd\Loan_Approval\loan_approval.pdd

11/20/2007 10:09:18:640 [tutorial.bpr] [loan_approval.pdd] Partner Link Type {no namespace}:loanPartnerLT can not be found.: in META-INF\pdd\Loan_Approval\loan_approval.pdd

11/20/2007 10:09:18:640 [tutorial.bpr] [loan_approval.pdd] Partner Link Type {no namespace}:riskAssessmentLT can not be found.: in META-INF\pdd\Loan_Approval\loan_approval.pdd

11/20/2007 10:09:18:640 [tutorial.bpr] [loan_approval.pdd] Partner Link Type {no namespace}:loanApprovalLT can not be found.: in META-INF\pdd\Loan_Approval\loan_approval.pdd

原因分析:

我们使用的ActiveBPEL引擎执行时对bpr包(流程部署包)的处理首先是从相应wsdl文件中查找partnerLinkType的定义,然后解析pdd(部署描述文件,流程引擎特有,非标准),最后处理bpel文件。

使用wsdl包装方式

新建一个名为wrapperwsdl文件,导入之前的wsdl文件,最后添加相应的bpel扩展。作为包装器的wsdl内容如下:

<wsdl:definitions

targetNamespace="http://example.com/loan-approval/wsdl/wrapper"

xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype"

xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"

xmlns:loan="http://example.com/loan-approval/wsdl/">

<wsdl:import namespace="http://example.com/loan-approval/wsdl/" location="loanServicePT.wsdl"/>

<plnk:partnerLinkType name="loanPartnerLT">

<plnk:role name="loanService" portType="loan:loanServicePT"/>

</plnk:partnerLinkType>

<plnk:partnerLinkType name="loanApprovalLT">

<plnk:role name="approver" portType="loan:loanApprovalPT"/>

</plnk:partnerLinkType>

<plnk:partnerLinkType name="riskAssessmentLT">

<plnk:role name="assessor" portType="loan:riskAssessmentPT"/>

</plnk:partnerLinkType>

</wsdl:definitions>

bpel文件进行相应的修改,将最新的wrapper.wsdl文件引入。

<?xml version="1.0" encoding="UTF-8"?>

<bpel:process

xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable"

xmlns:loan="http://example.com/loan-approval/wsdl/"

xmlns:lns="http://example.com/loan-approval/wsdl/wrapper"

xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="loan_approval" suppressJoinFailure="yes"

targetNamespace="http://loan_approval">

<bpel:import

importType="http://schemas.xmlsoap.org/wsdl/"

location="WSDL/wrapper.wsdl" namespace="http://example.com/loan-approval/wsdl/wrapper"/>

<bpel:partnerLinks>

<bpel:partnerLink myRole="loanService" name="customer" partnerLinkType="lns:loanPartnerLT"/>

<bpel:partnerLink name="assessor" partnerLinkType="lns:riskAssessmentLT" partnerRole="assessor"/>

<bpel:partnerLink name="approver" partnerLinkType="lns:loanApprovalLT" partnerRole="approver"/>

</bpel:partnerLinks>

<bpel:variables>

<bpel:variable messageType="loan:creditInformationMessage" name="request"/>

<bpel:variable messageType="loan:approvalMessage" name="approval"/>

<bpel:variable messageType="loan:riskAssessmentMessage" name="risk"/>

</bpel:variables>

<bpel:faultHandlers>

……………………………………..

</bpel:faultHandlers>

<bpel:flow>

……………………………………..

</bpel:flow>

</bpel:process>

修改相应的pdd文件和catalog.xml文件(引擎特定文件,非标准)

pdd文件修改如下:

<?xml version="1.0" encoding="UTF-8"?>

<process xmlns="http://schemas.active-endpoints.com/pdd/2006/08/pdd.xsd"

xmlns:bpelns="http://loan_approval"

xmlns:wsa="http://schemas.xmlsoap.org/ws/2003/03/addressing"

location="bpel/Loan_Approval/loan_approval.bpel" name="bpelns:loan_approval" persistenceType="none">

<partnerLinks>

<partnerLink name="approver">

<partnerRole endpointReference="static">

<wsa:EndpointReference xmlns:s="http://example.com/loan-approval/wsdl/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2003/03/addressing">

<wsa:Address>http://localhost:8080/active-bpel/services/ApproverWebService</wsa:Address>

<wsa:ServiceName PortName="SOAPPort">s:LoanApprover</wsa:ServiceName>

</wsa:EndpointReference>

</partnerRole>

</partnerLink>

<partnerLink name="assessor">

<partnerRole endpointReference="static">

<wsa:EndpointReference

xmlns:s="http://example.com/loan-approval/wsdl/"

xmlns:wsa="http://schemas.xmlsoap.org/ws/2003/03/addressing">

<wsa:Address>http://localhost:8080/active-bpel/services/AssessorWebService</wsa:Address>

<wsa:ServiceName PortName="SOAPPort1">s:LoanAssessor</wsa:ServiceName>

</wsa:EndpointReference>

</partnerRole>

</partnerLink>

<partnerLink name="customer">

<myRole allowedRoles="" binding="RPC" service="LoanService"/>

</partnerLink>

</partnerLinks>

<references>

<wsdl

location="project:/Loan_Approval/WSDL/wrapper.wsdl"

namespace="http://example.com/loan-approval/wsdl/wrapper"/>

<wsdl

location="project:/Loan_Approval/WSDL/loanServicePT.wsdl"

namespace="http://example.com/loan-approval/wsdl/"/>

</references>

</process>

catalog.xml文件修改如下:

<?xml version="1.0" encoding="UTF-8"?>

<catalog xmlns='http://schemas.active-endpoints.com/catalog/2006/07/catalog.xsd'>

<wsdlEntry

location="project:/Loan_Approval/WSDL/loanServicePT.wsdl"

classpath="wsdl/Loan_Approval/WSDL/loanServicePT.wsdl" />

<wsdlEntry

location="project:/Loan_Approval/WSDL/wrapper.wsdl"

classpath="wsdl/Loan_Approval/WSDL/wrapper.wsdl" />

<schemaEntry

location="project:/Loan_Approval/WSDL/error-messages.xsd"

classpath="wsdl/Loan_Approval/WSDL/error-messages.xsd" />

</catalog>

重新打包,部署到bpel引擎上,一切正常,实验成功。

关于PDD

A Process Deployment Descriptor (.pdd) file describes the relationship between the partner links defined in the BPEL file and the implementation required to interact with actual partner endpoints. You create a .pdd file to indicate where your

endpoint references are. The .pdd file is an integral part of the deployment package for the process.

使用wsdl包装方式,通过url引用第三方服务wsdl文件

首先将第三方服务的wsdl放到一台Web服务器上面,支持http访问。

<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:522.75pt; height:224.25pt'> <v:imagedata src="file:///d:\Temp\msohtmlclip1\01\clip_image001.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]-->wsdl文件的url为:http://10.3.5.37/loanServicePT.wsdl

修改本地相应的包装作用的wsdl文件wrapper.wsdl如下:

<wsdl:definitions

targetNamespace="http://example.com/loan-approval/wsdl/wrapper"

xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype"

xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"

xmlns:loan="http://example.com/loan-approval/wsdl/">

<wsdl:import

namespace="http://example.com/loan-approval/wsdl/" location="http://10.3.5.37/loanServicePT.wsdl"/>

<plnk:partnerLinkType name="loanPartnerLT">

<plnk:role name="loanService" portType="loan:loanServicePT"/>

</plnk:partnerLinkType>

<plnk:partnerLinkType name="loanApprovalLT">

<plnk:role name="approver" portType="loan:loanApprovalPT"/>

</plnk:partnerLinkType>

<plnk:partnerLinkType name="riskAssessmentLT">

<plnk:role name="assessor" portType="loan:riskAssessmentPT"/>

</plnk:partnerLinkType>

</wsdl:definitions

修改之前的pdd文件和catalog.xml文件如下:

pdd文件:

<?xml version="1.0" encoding="UTF-8"?>

<process xmlns="http://schemas.active-endpoints.com/pdd/2006/08/pdd.xsd" xmlns:bpelns="http://loan_approval" xmlns:wsa="http://schemas.xmlsoap.org/ws/2003/03/addressing" location="bpel/Loan_Approval/loan_approval.bpel" name="bpelns:loan_approval" persistenceType="none">

<partnerLinks>

<partnerLink name="approver">

<partnerRole endpointReference="static">

<wsa:EndpointReference xmlns:s="http://example.com/loan-approval/wsdl/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2003/03/addressing">

<wsa:Address>http://localhost:8080/active-bpel/services/ApproverWebService</wsa:Address>

<wsa:ServiceName PortName="SOAPPort">s:LoanApprover</wsa:ServiceName>

</wsa:EndpointReference>

</partnerRole>

</partnerLink>

<partnerLink name="assessor">

<partnerRole endpointReference="static">

<wsa:EndpointReference xmlns:s="http://example.com/loan-approval/wsdl/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2003/03/addressing">

<wsa:Address>http://localhost:8080/active-bpel/services/AssessorWebService</wsa:Address>

<wsa:ServiceName PortName="SOAPPort1">s:LoanAssessor</wsa:ServiceName>

</wsa:EndpointReference>

</partnerRole>

</partnerLink>

<partnerLink name="customer">

<myRole allowedRoles="" binding="RPC" service="LoanService"/>

</partnerLink>

</partnerLinks>

<references>

<wsdl

location="project:/Loan_Approval/WSDL/wrapper.wsdl"

namespace="http://example.com/loan-approval/wsdl/wrapper"/>

<wsdl

location="http://10.3.5.37/loanServicePT.wsdl"

namespace="http://example.com/loan-approval/wsdl/"/>

</references>

</process>

catalog.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<catalog xmlns='http://schemas.active-endpoints.com/catalog/2006/07/catalog.xsd'>

<wsdlEntry location="http://10.3.5.37/loanServicePT.wsdl" classpath="http://10.3.5.37/loanServicePT.wsdl" />

<wsdlEntry

location="project:/Loan_Approval/WSDL/wrapper.wsdl"

classpath="wsdl/Loan_Approval/WSDL/wrapper.wsdl" />

<schemaEntry

location="project:/Loan_Approval/WSDL/error-messages.xsd"

classpath="wsdl/Loan_Approval/WSDL/error-messages.xsd" />

</catalog>

然后将组合服务重新打包,部署到bpel引擎上,控制台部署日志报错如下:

11/25/2007 09:23:45:359 [tutorial.bpr] http://10.3.5.37/loanServicePT.wsdl could not be found in /f:/Apache Software Foundation/Tomcat 5.5/bpr/tutorial.bpr - please check your catalog descriptor (catalog.xml or wsdlCatalog.xml)

11/25/2007 09:23:45:375 [tutorial.bpr] Encountered unexpected deployment error. See previous messages for /f:/Apache Software Foundation/Tomcat 5.5/bpr/tutorial.bpr.

分析原因:BPEL引擎无法按照所提供的location找到相应的wsdl文件。

由于pddcatalog.xml为自己手动修改,所以无法判断地址定义格式是否符合正确,所以考虑通过官方的ActiveBPEL Designer实现外部引用wsdl,根据官方设计器生成相应的pddcatalog.xml来逆向分析。

还是以现有的贷款流程设计为例,在ActiveBPEL Designer下导入外部wsdl时出现问题:

<!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75" style='width:498.75pt;height:239.25pt'> <v:imagedata src="file:///d:\Temp\msohtmlclip1\01\clip_image003.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

点击OK时会报如下的错误:

<!--[if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75" style='width:330.75pt;height:108pt'> <v:imagedata src="file:///d:\Temp\msohtmlclip1\01\clip_image005.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

这个提示并非是找不到wsdl,因为如果找不到,相应的情况应该为:

<!--[if gte vml 1]><v:shape id="_x0000_i1028" type="#_x0000_t75" style='width:330.75pt;height:108pt'> <v:imagedata src="file:///d:\Temp\msohtmlclip1\01\clip_image007.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

但如果我导入一个Internet上第三方提供可以访问的wsdl文件,例如http://services.aonaware.com/DictService/提供了一个字典查询的服务,它的wsdl文件路径为http://services.aonaware.com/DictService/DictService.asmx?WSDL,结果可以正常的导入,结果如下:

<!--[if gte vml 1]><v:shape id="_x0000_i1029" type="#_x0000_t75" style='width:498.75pt;height:239.25pt'> <v:imagedata src="file:///d:\Temp\msohtmlclip1\01\clip_image009.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

<!--[if gte vml 1]><v:shape id="_x0000_i1030" type="#_x0000_t75" style='width:522.75pt;height:391.5pt'> <v:imagedata src="file:///d:\Temp\msohtmlclip1\01\clip_image011.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

DictService服务本身没有包含partnerLinkType的定义,对于这种情况,ActiveBPEL Deigner提供了BPEL扩展功能,大致操作如下:

选择相应WSDLPortType定义中相应的Operation操作,将其拖拽到BPEL设计器上面,将自动激活Partner Link Type导航窗口,界面如下:

<!--[if gte vml 1]><v:shape id="_x0000_i1031" type="#_x0000_t75" style='width:432.75pt;height:366pt'> <v:imagedata src="file:///d:\Temp\msohtmlclip1\01\clip_image013.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

<!--[if gte vml 1]><v:shape id="_x0000_i1032" type="#_x0000_t75" style='width:432.75pt;height:366pt'> <v:imagedata src="file:///d:\Temp\msohtmlclip1\01\clip_image015.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

点击Finish后将自动新建一个wsdl文件,包装有最初的原始wsdl文件。

新的wsdl文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<wsdl:definitions name="wrapper"

targetNamespace="http://www.jssoa.com/DictService"

xmlns:tns="http://www.jssoa.com/DictService"

xmlns:ns1="http://services.aonaware.com/webservices/"

xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"

xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">

<plnk:partnerLinkType xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype" name="DictSeverInformation">

<plnk:role name="GetServerInfo" portType="ns1:DictServiceHttpPost"/>

</plnk:partnerLinkType>

<wsdl:import

namespace="http://services.aonaware.com/webservices/"

location="http://services.aonaware.com/DictService/DictService.asmx?WSDL"/>

</wsdl:definitions>

(PS 这里有比较严重的bug,如果想再次添加一个新的partnerLinkType的话,之前的拖拽操作将没有响应,必须重启ActiveBPEL Designer程序后方可再次定义)

如果将这个第三方服务,用我们之前的方式导入到Web Reference里面,结果是成功的,具体过程如下:

将第三方服务的wsdl文件从http://services.aonaware.com/DictService/DictService.asmx?WSDL地址获得,保存到本地,命名为DictService.wsdl文件,放置到服务器上,支持http访问,还是按照之前的方式导入设计器中,结果如下:

<!--[if gte vml 1]><v:shape id="_x0000_i1033" type="#_x0000_t75" style='width:498.75pt;height:239.25pt'> <v:imagedata src="file:///d:\Temp\msohtmlclip1\01\clip_image017.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

点击OK后,成功导入

<!--[if gte vml 1]><v:shape id="_x0000_i1034" type="#_x0000_t75" style='width:522.75pt;height:391.5pt'> <v:imagedata src="file:///d:\Temp\msohtmlclip1\01\clip_image019.png" o:title="" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]-->

实验证明我们之前的贷款服务的wsdl不被设计器所“接受”,而那个wsdl文件本身是正确的,因为之前我们的流程部署和执行都是成功的。

分析比较两个wsdl文件,终于找到问题发生的原因,是因为之前的贷款服务的wsdl文件中引用了一个xsd文件用来定义Web服务错误信息,由于wsdl文件路径的变化,之前的xsd文件路径已经无法被当前wsdl所访问,需要同步修改该xsd路径如下:

<?xml version="1.0" encoding="UTF-8"?>

<wsdl:definitions………………………………>

<wsdl:types>

<xsd:schema elementFormDefault="qualified">

<xsd:import

namespace="http://example.com/loan-approval/xsd/error-messages/"

schemaLocation="http://10.3.5.38/error-messages.xsd" />

</xsd:schema>

</wsdl:types>

………………………………

这里我将xsdwsdl放置到服务器同一目录下,再次实验,顺利导入。然后我就可以尝试通过本地包装远程wsdl文件的方式实现partnerLinkType定义,在此基础上实现流程的设计

通过之前的方式,在ActiveBPEL Designer中对贷款服务的wsdl实现BPEL扩展,本地生成的wrapper.wsdl文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<wsdl:definitions name="wrapper"

targetNamespace="http://example.com/loan-approval/wsdl/wrapper"

xmlns:tns="http://example.com/loan-approval/wsdl/wrapper"

xmlns:ns1="http://example.com/loan-approval/wsdl/"

xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"

xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">

<plnk:partnerLinkType xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype" name="loanPartnerLT">

<plnk:role name="loanService" portType="ns1:loanServicePT"/>

</plnk:partnerLinkType>

<plnk:partnerLinkType xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype" name="loanApprovalLT">

<plnk:role name="approver" portType="ns1:loanApprovalPT"/>

</plnk:partnerLinkType>

<plnk:partnerLinkType xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype" name="riskAssessmentLT">

<plnk:role name="assessor" portType="ns1:riskAssessmentPT"/>

</plnk:partnerLinkType>

<wsdl:import

namespace="http://example.com/loan-approval/wsdl/" location="http://10.3.5.38/loanServicePT.wsdl"/>

</wsdl:definitions>

实验成功

但分析设计器生成的pdd文件,可以看出与先前的实现方式生成的pdd文件有较大的区别:

新生成的pdd文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<process

xmlns="http://schemas.active-endpoints.com/pdd/2006/08/pdd.xsd"

xmlns:bpelns="http://www.jssoa.com/loan_approval"

xmlns:wsa="http://schemas.xmlsoap.org/ws/2003/03/addressing"

location="bpel/Loan_Approval_Remote/loan_approval.bpel" name="bpelns:loan_approval" persistenceType="full">

<partnerLinks>

<partnerLink name="approver">

<partnerRole endpointReference="static">

<wsa:EndpointReference

xmlns:s="FILL_IN_NAMESPACE" xmlns:wsa="http://schemas.xmlsoap.org/ws/2003/03/addressing">

<wsa:Address>FILL_IN_ADDRESS_URI</wsa:Address>

<wsa:ServiceName PortName="FILL_IN_PORT_NAME">s:FILL_IN_SERVICE_NAME</wsa:ServiceName>

</wsa:EndpointReference>

</partnerRole>

</partnerLink>

<partnerLink name="assessor">

<partnerRole endpointReference="static">

<wsa:EndpointReference

xmlns:s="FILL_IN_NAMESPACE" xmlns:wsa="http://schemas.xmlsoap.org/ws/2003/03/addressing">

<wsa:Address>FILL_IN_ADDRESS_URI</wsa:Address>

<wsa:ServiceName PortName="FILL_IN_PORT_NAME">s:FILL_IN_SERVICE_NAME</wsa:ServiceName>

</wsa:EndpointReference>

</partnerRole>

</partnerLink>

<partnerLink name="customer">

<myRole allowedRoles="" binding="RPC" service="customerService"/>

</partnerLink>

</partnerLinks>

<references>

<wsdl location="http://10.3.5.37/loanServicePT.wsdl" namespace="http://example.com/loan-approval/wsdl/"/>

<wsdl

location="project:/Loan_Approval_Remote/wsdl/wrapper.wsdl"

namespace="http://example.com/loan-approval/wsdl/wrapper"/>

</references>

</process>

</process>

为了便于我们自己的BPEL设计器实现,尝试将最新生成的pdd进行静态转换,对每个partnerLink元素做如下操作:

<!--[if !supportLists]-->l <!--[endif]-->将FILL_IN_NAMESPACE替换为partnerLink相关服务的WSDL文件的目标名空间(target namespace);

<!--[if !supportLists]-->l <!--[endif]-->将FILL_IN_ADDRESS_URI替换为WSDL文件中<service>元素相应服务URI

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CENTOS 7 踢用户_CentOS服务器添加永久静态路由
  • 苹果app退款_苹果上最流氓的功能,终于被彻底关掉
  • ActiveBPEL引擎文件格式描述
  • springboot访问地址时404_SpringBoot配置一个过滤器获取远程地址、访问路径等信息
  • Keytool命令来生成CA数字证书
  • 游戏模型提取工具ninjaripper_图文翻译 | 赛车游戏道路的程序生成
  • 系统出错信息设计
  • 团队软件库_谷歌的软件工程文化:激发创造力、鼓励自主性
  • ActiveBPEL引擎流程部署描述符(pdd)文件概述
  • 200 switching to ascii mode_上海某超市保安遭辞退怒砸200瓶红酒;香槟产区采收时间打破历史记录 | 酒界新闻...
  • ODM和OLAP实现时序预测(一)
  • 16进制 转为图片 php_ImageMagick(图片处理软件) 分享
  • 数据分析 超市条码_超市小程序做得比较好的功能点是什么?
  • ODM和OLAP实现时序预测(二)
  • 软件产品研发方向调研内容_研发部职能分解:调研,产品、技术、工艺、软件研发,测试、验收...
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • Druid 在有赞的实践
  • eclipse(luna)创建web工程
  • Java|序列化异常StreamCorruptedException的解决方法
  • Java-详解HashMap
  • Making An Indicator With Pure CSS
  • Python连接Oracle
  • React Native移动开发实战-3-实现页面间的数据传递
  • 回流、重绘及其优化
  • 前端技术周刊 2019-02-11 Serverless
  • 小程序button引导用户授权
  • 协程
  • 异步
  • #ifdef 的技巧用法
  • #Linux(make工具和makefile文件以及makefile语法)
  • #QT(一种朴素的计算器实现方法)
  • (c语言)strcpy函数用法
  • (Java)【深基9.例1】选举学生会
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (编译到47%失败)to be deleted
  • (分布式缓存)Redis哨兵
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (正则)提取页面里的img标签
  • (转)linux下的时间函数使用
  • (转)setTimeout 和 setInterval 的区别
  • (转)菜鸟学数据库(三)——存储过程
  • .DFS.
  • .NET Micro Framework初体验
  • .NET 事件模型教程(二)
  • .NET 中 GetProcess 相关方法的性能
  • .net分布式压力测试工具(Beetle.DT)
  • .net开发日常笔记(持续更新)
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .NET值类型变量“活”在哪?
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • [.net] 如何在mail的加入正文显示图片
  • [Armbian] 部署Docker版Home Assistent,安装HACS并连接米家设备
  • [C#]DataTable常用操作总结【转】
  • [c++] 什么是平凡类型,标准布局类型,POD类型,聚合体