Я пытаюсь вызвать SOAP 1.2 WS, которому нужен заголовок SOAP.Добавление двух тегов заголовка мыла
Я использую конструктор интеграции под названием SAP Hana Cloud Integration, я получаю полное XML-сообщение, но без заголовка, и система-получатель должна получить MessageId, чтобы принять данные. Сценарий полон, я взял один из online documentation и I'v адаптированы к моей потребности:
мне удалось заставить его работать, используя SOAP UI после включения WS-A-адресация и сделать его генерировать случайный UUID
в журнале SOAP UI я узнал, что заголовок сообщения отправлено получателю было следующее:
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsa:MessageID>uuid:8122ffc1-62ee-436c-a284-224e49988013</wsa:MessageID>
<wsa:Action>http://sap.com/xi/AP/HumanCapitalManagementMasterDataReplication/Global/HumanCapitalManagementMasterDataReplicationEmployeeMasterDataReplicationIn/ReplicateCompleteEmployeeMasterDataRequest</wsa:Action>
</soap:Header>
Я попытался создать тот же заголовок с помощью Groovy:
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.ArrayList;
import java.util.List;
import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.cxf.binding.soap.SoapHeader;
import org.apache.cxf.headers.Header;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import com.sap.it.api.ITApiFactory;
import com.sap.it.api.securestore.SecureStoreService;
import com.sap.it.api.securestore.UserCredential;
def Message processData(Message message) {
String uuid = "uuid:" + UUID.randomUUID().toString();
String ActionUrl ="http://sap.com/xi/AP/HumanCapitalManagementMasterDataReplication/Global/HumanCapitalManagementMasterDataReplicationEmployeeMasterDataReplicationIn/ReplicateCompleteEmployeeMasterDataRequest";
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
dbf.setIgnoringElementContentWhitespace(true);
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.newDocument();
//WSA MessageID
Element MessageId = doc.createElementNS("http://www.w3.org/2005/08/addressing", "wsa:MessageID");
MessageId.setTextContent(uuid);
doc.appendChild(MessageId);
//WSA Action
Element Action = doc.createElementNS("http://www.w3.org/2005/08/addressing", "wsa:Action");
Action.setTextContent(ActionUrl);
doc.appendChild(Action);
SoapHeader header = new SoapHeader(new QName("http://www.w3.org/2005/08/addressing", MessageId.getLocalName()), MessageId);
header.setMustUnderstand(true);
List headersList = new ArrayList<SoapHeader>();
headersList.add(header);
SoapHeader header2 = new SoapHeader(new QName("http://www.w3.org/2005/08/addressing", Action.getLocalName()), Action);
headersList.add(header2);
header2.setMustUnderstand(true);
message.setHeader("org.apache.cxf.headers.Header.list", headersList);
return message;
}
Но оказалось, что невозможно установить два корневых узла под заголовком, вот сообщение об ошибке: cause: org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: Была сделана попытка вставить узел, где он не разрешен ,
Любая идея о том, как достичь этого? Благодаря ! BR, Амин.
Какова ваша структура тестового случая? Когда soapui может позаботиться о них, зачем делать это с groovy? Можете ли вы проверить необработанный запрос, если у него есть дубликаты данных? Кстати, вышеупомянутый скрипт не кажется полным, просто его частью? Наконец, вы отправляете запрос с помощью метода groovy или запроса? – Rao
Я использую конструктор интеграции под названием SAP Hana Cloud Integration, я получаю полное XML-сообщение, но без заголовка, и система-получатель должна получить MessageId, чтобы принять данные. Скрипт заполнен, я взял его из онлайн-документации, и я адаптирован к моей потребности: [link] (https://proddps.hana.ondemand.com/dps/d/preview/93810d568bee49c6b3d7b5065a30b0ff/2015.10/ ru-US/frameset.html? 999aa87a429846a4a3f3f8d5818dd0d5.html) –
Можете ли вы перейти к предыдущим комментариям/вопросам и обновить? – Rao