Как изменить xml, сгенерированный пакетом мыла в node.js? - PullRequest
1 голос
/ 13 июня 2019

Я использую SOAP пакет, чтобы сделать запрос к workday-api по xml.

Проблема с xml, сгенерированным пакетом мыла.

сгенерированный XML

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:wd-wsdl="urn:com.workday/bsvc/Recruiting"
    xmlns:wd="urn:com.workday/bsvc"
    xmlns:nyw="urn:com.netyourwork/aod">
    <soapenv:Header>
        <wsse:Security soapenv:mustUnderstand="1"
            xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
            xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
            <wsse:UsernameToken>
                <wsse:Username>Username</wsse:Username>
                <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Password</wsse:Password>
            </wsse:UsernameToken>
        </wsse:Security>
    </soapenv:Header>
    <soapenv:Body>
        <wd:Get_Applicants_Request
            xmlns:wd="urn:com.workday/bsvc"
            xmlns="urn:com.workday/bsvc">
            <bsvc:Get_Applicants_Request bsvc:version="v32.1">
                <bsvc:Request_Criteria>
                    <bsvc:Email_Address>abc@gmail.com</bsvc:Email_Address>
                </bsvc:Request_Criteria>
                <bsvc:Response_Group>
                    <bsvc:Include_Reference>true</bsvc:Include_Reference>
                    <bsvc:Include_Personal_Information>true</bsvc:Include_Personal_Information>
                    <bsvc:Include_Recruiting_Information>true</bsvc:Include_Recruiting_Information>
                    <bsvc:Include_Qualification_Profile>true</bsvc:Include_Qualification_Profile>
                    <bsvc:Include_Resume>false</bsvc:Include_Resume>
                    <bsvc:Include_Background_Check>false</bsvc:Include_Background_Check>
                    <bsvc:Include_External_Integration_ID_Data>false</bsvc:Include_External_Integration_ID_Data>
                </bsvc:Response_Group>
            </bsvc:Get_Applicants_Request>
        </wd:Get_Applicants_Request>
    </soapenv:Body>
</soapenv:Envelope>

Мне нужен xml, как показано ниже

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:bsvc="urn:com.workday/bsvc">
    <soapenv:Header>
        <wsse:Security soapenv:mustUnderstand="1"
            xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
            xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
            <wsse:UsernameToken>
                <wsse:Username>Username</wsse:Username>
                <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Password</wsse:Password>
            </wsse:UsernameToken>
        </wsse:Security>
    </soapenv:Header>
    <soapenv:Body>
        <bsvc:Get_Applicants_Request bsvc:version="v32.1">
            <bsvc:Request_Criteria>
                <bsvc:Email_Address>abc@gmail.com</bsvc:Email_Address>
            </bsvc:Request_Criteria>
            <bsvc:Response_Group>
                <bsvc:Include_Reference>true</bsvc:Include_Reference>
                <bsvc:Include_Personal_Information>true</bsvc:Include_Personal_Information>
                <bsvc:Include_Recruiting_Information>true</bsvc:Include_Recruiting_Information>
                <bsvc:Include_Qualification_Profile>true</bsvc:Include_Qualification_Profile>
                <bsvc:Include_Resume>false</bsvc:Include_Resume>
                <bsvc:Include_Background_Check>false</bsvc:Include_Background_Check>
                <bsvc:Include_External_Integration_ID_Data>false</bsvc:Include_External_Integration_ID_Data>
            </bsvc:Response_Group>
        </bsvc:Get_Applicants_Request>
    </soapenv:Body>
</soapenv:Envelope>

В сгенерированном мылеxml содержит дополнительное пространство имен в soapenv: envelope .Как это убрать.И я получаю дополнительный тег после тега soapenv: body .

Я передаю ниже детали для заголовка и тела.

заголовок:

let soapHeader = `<wsse:Security soapenv:mustUnderstand="1"
    xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
    <wsse:UsernameToken>
        <wsse:Username>Username</wsse:Username>
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Password</wsse:Password>
    </wsse:UsernameToken>
</wsse:Security>`

и тело:

let xml = `<bsvc:Get_Applicants_Request bsvc:version="v32.1">
    <bsvc:Request_Criteria>
        <bsvc:Email_Address>abc@gmail.com</bsvc:Email_Address>
    </bsvc:Request_Criteria>
    <bsvc:Response_Group>
        <bsvc:Include_Reference>true</bsvc:Include_Reference>
        <bsvc:Include_Personal_Information>true</bsvc:Include_Personal_Information>
        <bsvc:Include_Recruiting_Information>true</bsvc:Include_Recruiting_Information>
        <bsvc:Include_Qualification_Profile>true</bsvc:Include_Qualification_Profile>
        <bsvc:Include_Resume>false</bsvc:Include_Resume>
        <bsvc:Include_Background_Check>false</bsvc:Include_Background_Check>
        <bsvc:Include_External_Integration_ID_Data>false</bsvc:Include_External_Integration_ID_Data>
    </bsvc:Response_Group>
</bsvc:Get_Applicants_Request>`

и используется ниже метод длязапросите XML с использованием мыла, поскольку рабочий день предоставляет мыло api.

let client = await soap.createClientAsync(url, wsdlOptions)
client.addSoapHeader(soapHeader)
let resp = await client.Get_ApplicantsAsync(xml)

Пожалуйста, помогите мне сделать XML, как мне было нужно, используя пакет SOAP.

1 Ответ

0 голосов
/ 13 июня 2019

Пример кода, который вы предоставляете, не показывает то, что вы предоставляете в качестве аргументов метода (что является объектом xml в вашем коде?).

Исходя из поста, я предполагаю, что вы сами строите строку xml и хотите передать ее непосредственно в пакет SOAP. В этом случае ваш аргумент метода должен выглядеть следующим образом («Пример с XML-строкой для аргументов» в документации пакета)

const resp = await client.Get_ApplicantsAsync({_xml: xmlBody})

Имейте в виду, что вам не хватает пространства имен bsvc.
Вы можете добавить его прямо в ваше тело xml к элементу Get_Applicants_Request:

<bsvc:Get_Applicants_Request xmlns:bsvc="urn:com.workday/bsvc" bsvc:version="v32.1">
</bsvc:Get_Applicants_Request>

или вы можете включить его в конверт (возможно, у вас есть другие звонки, которым также нужно это пространство имен):

client.wsdl.xmlnsInEnvelope += 'xmlns:bsvc="urn:com.workday/bsvc';
...