Как отправить данные с веб-страницы в XML, а затем в веб-службу SOAP

До сих пор у нас был веб-сервис SOAP бэкэнда для нашего приложения, который использовал ввод XML для доступа к сервису. Но теперь мы пытаемся создать внешний интерфейс, который принимает несколько входных данных от пользователя и соответственно обновляет только атомарные значения xml, поскольку у нас уже есть структура xml. После того, как xml обновляется из пользовательских значений, сервис должен использовать этот xml в качестве входных данных.

Таким образом, поток будет выглядеть следующим образом: пользовательский ввод (html) -> update xml -> передать этот xml как ввод в веб-службу SOAP — ответ службы.

Я понятия не имею, какие технологии можно использовать для этого и как это сделать, для обновления XML, который я начал с php и xpath, я не знаю, прав ли я. Может кто-нибудь помочь мне с этим и предложить решение?

Кроме того, у моего xml есть мыльные заголовки, поэтому у меня возникают проблемы с использованием этого xml с xpath, так как xpath использует чистый xml. Любое решение по этому вопросу тоже?

Java, пружины используется для разработки бэкэнда.

0

Решение

Трудно дать точный ответ, не зная, в какой именно среде вы работаете (целевой веб-сервис, предпочтительный язык программирования и т. Д.). Но я попробую общий ответ.

Использование веб-службы

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

Например, Salesforce предлагает описание своего SOAP API, настроенного для данной учетной записи, в форме файла WSDL (язык описания веб-служб). Это XML, как запросы / ответы SOAP. Для своих приложений я использовал Visual Studio для создания ссылки в своем проекте на API-интерфейс Salesforce с использованием файла WSDL. Остальное делается с помощью простой инициализации объекта и методов. Например:

using ServiceName;  // Namespace generated by Visual Studio using the WSDL.

var client = new ServiceClient("username", "password");

client.Create(new ServiceThing("information", "about the new thing"));

Этот пример в C # -подобном синтаксисе вызвал бы SOAP API для создания некоторого объекта с заданной информацией. Детали сетевого запроса полностью скрыты.

Чтобы узнать, как использовать сервисы целевого API, найдите что-то вроде «использовать WSDL на [языке по вашему выбору]». Более того, посмотрите, есть ли у целевого веб-сервиса документация, описывающая, как его использовать.

Отправка данных с веб-страницы

Существует любое количество инструментов для извлечения информации из HTTP-запроса POST и обработки его. Я наиболее знаком с ASP.NET. Вы, кажется, знакомы с PHP.

Для простоты вы должны попытаться использовать целевой веб-сервис на том же языке, что и ваш веб-сервис, который получает данные от пользователя. Я приведу пример, подобный ASP.NET, который, надеюсь, вы сможете перевести на предпочитаемые вами инструменты:

protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostback)
{
// a and b are names of input fields in our page.
string a = Request["a"];
string b = Request["b"];

// Let's assume we've initialized the web service client as a property.
Client.Create(new ServiceThing(a, b));
}
}

Вот и ты. Не требуется ручное редактирование XML. SOAP XML автоматически генерируется на основе вашего ServiceThing Объект и отправить на ваш целевой веб-сервис.

Опять же, это общий ответ на общий вопрос. Если вы обновите свой вопрос с более подробной информацией, я постараюсь отредактировать этот ответ с более подробной информацией.

0

Другие решения

Если у вас есть Java-платформа, то это решение будет вам полезно.
Для этого я создал новый проект веб-приложения и использовал мастер WSDL Web Service Wrom в категории Web Services. Реализация была легкой:

@WebService(serviceName = "AddNumbersService", portName = "AddNumbersPort", endpointInterface = "org.example.duke.AddNumbersPortType",
targetNamespace = "http://duke.example.org", wsdlLocation = "WEB-INF/wsdl/AddNumbersImpl/AddNumbers.wsdl")
public class AddNumbersImpl implements AddNumbersPortType {

public int addNumbers(int arg0, int arg1) throws AddNumbersFault {
int result = arg0+arg1;
if (result < 0) {
org.example.duke.xsd.AddNumbersFault fault = new org.example.duke.xsd.AddNumbersFault();
fault.setMessage("the result is negative");
fault.setFaultInfo("negative result: "+result);
throw new AddNumbersFault("error", fault);
} else {
return result;
}
}

public void oneWayInt(int arg0) {
System.out.println("JAX-WS: oneWayInt request "+arg0);
}

}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector