1

我们正在配置 WSO2 API 管理器(版本 2.1.0)以使用应用程序创建工作流。

为此,我们配置了一个 BPS 节点(版本 3.6.0),如 https://docs.wso2.com/display/AM210/Adding+an+Application+Creation+Workflow中所述 ,我们已经完成了描述的调整在 https://docs.wso2.com/display/AM210/Configuring+Workflows+in+a+Cluster 中是必需的,因为我们使用了 2 个不同的节点,具有不同的名称。

现在,应用程序创建过程/工作流似乎工作正常,并且接收和处理批准和拒绝。

但是我们仍然有一个错误。当我们登录管理应用程序 ( https://apimanager.example.com:9443/admin ) 时,我们会在 BPS 节点中看到一个错误。

TID: [-1234] [] [2018-06-18 10:36:20,508]  INFO {org.apache.axis2.builder.BuilderUtil} -  OMException in getSOAPBuilder {org.apache.axis2.builder.BuilderUtil}
org.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog

我们在做任何事情之前看到这个错误,在任何情况下(没有任务,有待处理的任务和没有待处理的任务)

很明显,管理员应用程序在登录时调用了 WebService,内容错误,但我们不知道如何调试它。我们如何知道 BPS 节点调用了哪个服务?

任何建议都将受到欢迎。

下面,我们要安装的脚本配置工作流,以及我们正在使用的工作流扩展

=========== 自动配置脚本 ==============

CMD_XMLSTARLET=xmlstarlet
CMD_JQ=jq
# configureWorkflow
# Configure workflows por human based approval processes
# Reference:
#       Adding an Application Creation Workflow
#       https://docs.wso2.com/display/AM210/Adding+an+Application+Creation+Workflow
#   Adding an Application registration (generate keys) workflow
#   https://docs.wso2.com/display/AM210/Adding+an+Application+Registration+Workflow
#       Cluster configuration (change the host names)
#   https://docs.wso2.com/display/AM210/Configuring+Workflows+in+a+Cluster
function configureWorkflow()
{
    if [ -z $1 ] || [ -z $2 ]
    then
        echo "Indicate manager node and bps node. E.g. configureWorkflow APIM APIB" 1>&2
        exit 1
    else
        # Namespaces 
        # Default namespace for humantask.xml
        local nsh=http://wso2.org/humantask/schema/server/config
        # Default namespace for b4p-coordination-config.xml
        local nsb=http://wso2.org/bps/b4p/coordination/config
        local svns=http://org.wso2.securevault/configuration
        # WebServices   
        local wsa=http://www.w3.org/2005/08/addressing
        local wsdl=http://schemas.xmlsoap.org/wsdl/
        local soap=http://schemas.xmlsoap.org/wsdl/soap/
        local soap12=http://schemas.xmlsoap.org/wsdl/soap12/
        # Synapse
        local nss=http://ws.apache.org/ns/synapse

        # Configure workflow node
        su -c "$CMD_XMLSTARLET ed -L -N x=$nsh -u //x:HumanTaskCoordination/x:TaskCoordinationEnabled -v true $WSO2_PATH/${NODE_NAME[$2]}/repository/conf/humantask.xml" $WSO2_USER_NAME
        su -c "$CMD_XMLSTARLET ed -L -N x=$nsb -u //x:TaskCoordinationEnabled -v true $WSO2_PATH/${NODE_NAME[$2]}/repository/conf/b4p-coordination-config.xml" $WSO2_USER_NAME

        # Configure the workflows services (launch)
        su -c "$CMD_XMLSTARLET ed -L -N wsa=$wsa -u //wsa:EndpointReference/wsa:Address -v http://${NODE_HOST[$2]}:${NODE_PORT_HTTP_SERVLET[$2]}/services/ApplicationService $WSO2_PATH/${NODE_NAME[$1]}/business-processes/epr/ApplicationService.epr" $WSO2_USER_NAME
        su -c "$CMD_XMLSTARLET ed -L -N wsa=$wsa -u //wsa:EndpointReference/wsa:Metadata/authorization-password -v $WSO2_ADMIN_PASS $WSO2_PATH/${NODE_NAME[$1]}/business-processes/epr/ApplicationService.epr" $WSO2_USER_NAME

        # Configure the workflows services (callbacks)
        su -c "$CMD_XMLSTARLET ed -L -N wsa=$wsa -u //wsa:EndpointReference/wsa:Address -v https://${NODE_HOST[$1]}:${NODE_PORT_HTTPS_NIOPT[$1]}/services/WorkflowCallbackService $WSO2_PATH/${NODE_NAME[$1]}/business-processes/epr/ApplicationCallbackService.epr" $WSO2_USER_NAME
        su -c "$CMD_XMLSTARLET ed -L -N wsa=$wsa -u //wsa:EndpointReference/wsa:Metadata/authorization-password -v $WSO2_ADMIN_PASS $WSO2_PATH/${NODE_NAME[$1]}/business-processes/epr/ApplicationCallbackService.epr" $WSO2_USER_NAME

        # Copy configured workflows from APIM to BPS
        su -c "cp -r $WSO2_PATH/${NODE_NAME[$1]}/business-processes/epr  $WSO2_PATH/${NODE_NAME[$2]}/repository/conf/" $WSO2_USER_NAME

        # https://docs.wso2.com/display/AM180/Configuring+Workflows+in+a+Cluster        

        # Install BPEL Processes
        su -c "mkdir $WSO2_PATH/${NODE_NAME[$2]}/repository/deployment/server/bpel" $WSO2_USER_NAME
        su -c "cp $WSO2_PATH/${NODE_NAME[$1]}/business-processes/application-creation/BPEL/ApplicationApprovalWorkFlowProcess_1.0.0.zip $WSO2_PATH/${NODE_NAME[$2]}/repository/deployment/server/bpel" $WSO2_USER_NAME
        su -c "cp $WSO2_PATH/${NODE_NAME[$1]}/business-processes/application-registration/BPEL/ApplicationRegistrationWorkflowProcess_1.0.0.zip $WSO2_PATH/${NODE_NAME[$2]}/repository/deployment/server/bpel" $WSO2_USER_NAME
        su -c "cp $WSO2_PATH/${NODE_NAME[$1]}/business-processes/user-signup/BPEL/UserSignupApprovalProcess_1.0.0.zip $WSO2_PATH/${NODE_NAME[$2]}/repository/deployment/server/bpel/." $WSO2_USER_NAME
        su -c "cp $WSO2_PATH/${NODE_NAME[$1]}/business-processes/subscription-creation/BPEL/SubscriptionApprovalWorkFlowProcess_1.0.0.zip $WSO2_PATH/${NODE_NAME[$2]}/repository/deployment/server/bpel" $WSO2_USER_NAME
        # Install Human task processes
        su -c "mkdir $WSO2_PATH/${NODE_NAME[$2]}/repository/deployment/server/humantasks" $WSO2_USER_NAME
        su -c "cp $WSO2_PATH/${NODE_NAME[$1]}/business-processes/application-creation/HumanTask/ApplicationsApprovalTask-1.0.0.zip $WSO2_PATH/${NODE_NAME[$2]}/repository/deployment/server/humantasks" $WSO2_USER_NAME
        su -c "cp $WSO2_PATH/${NODE_NAME[$1]}/business-processes/application-registration/HumanTask/ApplicationRegistrationTask-1.0.0.zip $WSO2_PATH/${NODE_NAME[$2]}/repository/deployment/server/humantasks" $WSO2_USER_NAME
        su -c "cp $WSO2_PATH/${NODE_NAME[$1]}/business-processes/user-signup/HumanTask/UserApprovalTask-1.0.0.zip $WSO2_PATH/${NODE_NAME[$2]}/repository/deployment/server/humantasks" $WSO2_USER_NAME
        su -c "cp $WSO2_PATH/${NODE_NAME[$1]}/business-processes/subscription-creation/HumanTask/SubscriptionsApprovalTask-1.0.0.zip $WSO2_PATH/${NODE_NAME[$2]}/repository/deployment/server/humantasks" $WSO2_USER_NAME

        # Configure API Manager node
        file=$WSO2_PATH/${NODE_NAME[$1]}/repository/deployment/server/jaggeryapps/admin/site/conf/site.json
        # NOTICE: The site file is wrong, and cannot be parsed. Solve with a sed replace
        wrongLine="\\\"https://<BPSHost>:<BPSPort>/services/\\\","
        rightLine="\\\"https://<BPSHost>:<BPSPort>/services/\\\""
        su -c "sed -i.bak 's=$wrongLine=$rightLine=' $file" $WSO2_USER_NAME
        # Remove all javascript style comment lines (now allowed in jq)
        su -c "sed -i 's=^[[:blank:]]*//.*$==g' $file" $WSO2_USER_NAME
        # Worflow endpoint
        su -c "$CMD_JQ '.workflows.workFlowServerURL = \"${NODE_URL_SERVICES[$2]}\"' $file > $TMPDIR/tmp.$$.site.json && mv $TMPDIR/tmp.$$.site.json $file" $WSO2_USER_NAME
        # Callback proxy endpoints
        local jaguri="${NODE_URL_HTTPS_SERVLET[$1]}/store/site/blocks/workflow/workflow-listener/ajax/workflow-listener.jag"
        local soaphttps="${NODE_URL_HTTPS_NIOPT[$1]}/services/WorkflowCallbackService.WorkflowCallbackServiceHttpsSoap11Endpoint/"
        local soaphttp="${NODE_URL_HTTP_NIOPT[$1]}/services/WorkflowCallbackService.WorkflowCallbackServiceHttpsSoap11Endpoint/"
        local soap12https="${NODE_URL_HTTPS_NIOPT[$1]}/services/WorkflowCallbackService.WorkflowCallbackServiceHttpsSoap12Endpoint/"
        local soap12http="${NODE_URL_HTTP_NIOPT[$1]}/services/WorkflowCallbackService.WorkflowCallbackServiceHttpsSoap12Endpoint/"
        su -c "$CMD_XMLSTARLET ed -L -N nss=$nss -u \"//nss:proxy/nss:target/nss:inSequence/nss:send/nss:endpoint/nss:address/@uri\" -v $jaguri $WSO2_PATH/${NODE_NAME[$1]}/repository/deployment/server/synapse-configs/default/proxy-services/WorkflowCallbackService.xml" $WSO2_USER_NAME
        su -c "$CMD_XMLSTARLET ed -L -N nss=$nss -N wsdl=$wsdl -N soap=$soap -u \"//nss:proxy/nss:publishWSDL/wsdl:definitions/wsdl:service/wsdl:port[@name='WorkflowCallbackServiceHttpsSoap11Endpoint']/soap:address/@location\" -v $soaphttps $WSO2_PATH/${NODE_NAME[$1]}/repository/deployment/server/synapse-configs/default/proxy-services/WorkflowCallbackService.xml" $WSO2_USER_NAME
        su -c "$CMD_XMLSTARLET ed -L -N nss=$nss -N wsdl=$wsdl -N soap=$soap -u \"//nss:proxy/nss:publishWSDL/wsdl:definitions/wsdl:service/wsdl:port[@name='WorkflowCallbackServiceHttpSoap11Endpoint']/soap:address/@location\" -v $soaphttp $WSO2_PATH/${NODE_NAME[$1]}/repository/deployment/server/synapse-configs/default/proxy-services/WorkflowCallbackService.xml" $WSO2_USER_NAME
        su -c "$CMD_XMLSTARLET ed -L -N nss=$nss -N wsdl=$wsdl -N soap12=$soap12 -u \"//nss:proxy/nss:publishWSDL/wsdl:definitions/wsdl:service/wsdl:port[@name='WorkflowCallbackServiceHttpsSoap12Endpoint']/soap12:address/@location\" -v $soap12https $WSO2_PATH/${NODE_NAME[$1]}/repository/deployment/server/synapse-configs/default/proxy-services/WorkflowCallbackService.xml" $WSO2_USER_NAME
        su -c "$CMD_XMLSTARLET ed -L -N nss=$nss -N wsdl=$wsdl -N soap12=$soap12 -u \"//nss:proxy/nss:publishWSDL/wsdl:definitions/wsdl:service/wsdl:port[@name='WorkflowCallbackServiceHttpSoap12Endpoint']/soap12:address/@location\" -v $soap12http $WSO2_PATH/${NODE_NAME[$1]}/repository/deployment/server/synapse-configs/default/proxy-services/WorkflowCallbackService.xml" $WSO2_USER_NAME

    fi
}

============= workflow-extensions.xml ================

<WorkFlowExtensions>
    <ApplicationCreation executor="org.wso2.carbon.apimgt.impl.workflow.ApplicationCreationWSWorkflowExecutor">
         <Property name="serviceEndpoint">http://apibps.example.com:9765/services/ApplicationApprovalWorkFlowProcess/</Property>
         <Property name="username">admin</Property>
         <Property name="password">xxxxx</Property>
         <Property name="callbackURL">https://apimanager.example.com:8243/services/WorkflowCallbackService</Property>
    </ApplicationCreation>
    <ProductionApplicationRegistration executor="org.wso2.carbon.apimgt.impl.workflow.ApplicationRegistrationWSWorkflowExecutor">
        <Property name="serviceEndpoint">http://apibps.example.com:9765/services/ApplicationRegistrationWorkFlowProcess/</Property>
        <Property name="username">admin</Property>
        <Property name="password">xxxxx</Property>
        <Property name="callbackURL">https://apimanager.example.com:8243/services/WorkflowCallbackService</Property>
    </ProductionApplicationRegistration>
    <SandboxApplicationRegistration executor="org.wso2.carbon.apimgt.impl.workflow.ApplicationRegistrationWSWorkflowExecutor">
        <Property name="serviceEndpoint">http://apibps.example.com:9765/services/ApplicationRegistrationWorkFlowProcess/</Property>
        <Property name="username">admin</Property>
        <Property name="password">xxxxx</Property>
        <Property name="callbackURL">https://apimanager.example.com:8243/services/WorkflowCallbackService</Property>
    </SandboxApplicationRegistration>

    <SubscriptionCreation executor="org.wso2.carbon.apimgt.impl.workflow.SubscriptionCreationWSWorkflowExecutor">
         <Property name="serviceEndpoint">http://apibps.example.com:9765/services/SubscriptionApprovalWorkFlowProcess/</Property>
         <Property name="username">admin</Property>
         <Property name="password">xxxxx</Property>
         <Property name="callbackURL">https://apimanager.example.com:8243/services/WorkflowCallbackService</Property>
    </SubscriptionCreation>

    <UserSignUp executor="org.wso2.carbon.apimgt.impl.workflow.UserSignUpWSWorkflowExecutor">
         <Property name="serviceEndpoint">http://apibps.example.com:9765/services/UserSignupProcess/</Property>
         <Property name="username">admin</Property>
         <Property name="password">xxxxx</Property>
         <Property name="callbackURL">https://apimanager.example.com:8243/services/WorkflowCallbackService</Property>
    </UserSignUp>

    <!--
    ***NOTE:***
        Users of deletion workflows are expected to implement their own deletion workflow executors and services.
        By default API Manager only implements the core functionalities required to support deletion workflows and
        simple deletion workflow executors. Default WS deletion workflow implementations are not available with the
        distribution.
    -->

    <SubscriptionDeletion executor="org.wso2.carbon.apimgt.impl.workflow.SubscriptionDeletionSimpleWorkflowExecutor"/>
    <!--SubscriptionDeletion executor="org.wso2.carbon.apimgt.impl.workflow.SubscriptionDeletionSimpleWorkflowExecutor">
         <Property name="serviceEndpoint">http://localhost:9765/services/SubscriptionApprovalWorkFlowProcess/</Property>
         <Property name="username">admin</Property>
         <Property name="password">xxxxx</Property>
         <Property name="callbackURL">https://localhost:8243/services/WorkflowCallbackService</Property>
    </SubscriptionDeletion -->
    <ApplicationDeletion executor="org.wso2.carbon.apimgt.impl.workflow.ApplicationDeletionSimpleWorkflowExecutor"/>
    <!--ApplicationDeletion executor="org.wso2.carbon.apimgt.impl.workflow.ApplicationDeletionSimpleWorkflowExecutor">
         <Property name="serviceEndpoint">http://localhost:9765/services/ApplicationApprovalWorkFlowProcess/</Property>
         <Property name="username">admin</Property>
         <Property name="password">xxxxx</Property>
         <Property name="callbackURL">https://localhost:8243/services/WorkflowCallbackService</Property>
    </ApplicationDeletion-->

    <!-- Publisher related workflows -->
    <APIStateChange executor="org.wso2.carbon.apimgt.impl.workflow.APIStateChangeSimpleWorkflowExecutor" />
    <!-- <APIStateChange executor="org.wso2.carbon.apimgt.impl.workflow.APIStateChangeWSWorkflowExecutor">
        <Property name="processDefinitionKey">APIStateChangeApprovalProcess</Property>
        <Property name="stateList">Created:Publish,Published:Block</Property>        
    </APIStateChange>-->



</WorkFlowExtensions>
4

0 回答 0