如何将数据从网页发送到 XML,然后再发送到 SOAP Web 服务
How to send data from a web page to XML and then to a SOAP web service
到目前为止,我们的应用程序有一个后端 SOAP Web 服务,它使用 xml 输入来访问服务。但是现在我们正在尝试构建前端,它从用户那里获取一些输入并相应地仅更新 xml 原子值,因为我们已经有了 xml 结构。从用户值更新 xml 后,服务应将 xml 作为输入命中。
因此流程将类似于:用户输入(html) --> 更新 xml --> 将此 xml 作为输入传递给 SOAP Web 服务 --- 服务响应。
我不知道可以使用什么技术以及如何完成更新 xml 我从 php 和 xpath 开始,我不知道我是不是正确的。谁能帮我解决这个问题并提出解决方案?
此外,我的 xml 有 soap headers,所以我在将此 xml 与 xpath 一起使用时遇到问题,因为 xpath 使用纯 xml。对此也有解决方案吗?
java,后端开发使用springs
如果您有 java 平台,那么此解决方案将对您有所帮助。
为此,我创建了新的 Web 应用程序项目并使用了 Web 服务类别中的 Web 服务 Wrom WSDL 向导。实施很简单:
@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);
}
}
如果不知道您正在使用的确切环境(目标 Web 服务、首选编程语言等),就很难提供准确的答案。但我会尝试一个笼统的答案。
使用 Web 服务
SOAP 网络服务经常(总是?)提供机器可读的描述,可以通过某些工具 "consumed" 生成您喜欢的语言的代码以与 API 交互。
例如,Salesforce 以 WSDL(Web 服务描述语言)文件的形式提供了针对给定帐户定制的 SOAP API 的描述。它是 XML,就像 SOAP requests/responses。对于我的应用程序,我使用 Visual Studio 在我的项目中使用 WSDL 文件创建对 Salesforce 的 API 的引用。其余的是通过简单的对象初始化和方法完成的。例如:
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 的服务,请搜索类似 "consume WSDL in [language of your choice]" 的内容。更好的是,查看目标 Web 服务是否有描述如何使用它的文档。
从网页发送数据
有许多工具可以从 HTTP POST 请求中检索信息并据此采取行动。我最熟悉 ASP.NET。你似乎很熟悉 PHP。
为简单起见,您需要尝试使用与接收用户输入的 Web 服务相同的语言来使用目标 Web 服务。我将提供一个类似于 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
对象自动生成并发送到您的目标网络服务。
同样,这是对一般问题的一般回答。如果您用更具体的细节更新您的问题,我会尝试用更有针对性的细节来编辑这个答案。
到目前为止,我们的应用程序有一个后端 SOAP Web 服务,它使用 xml 输入来访问服务。但是现在我们正在尝试构建前端,它从用户那里获取一些输入并相应地仅更新 xml 原子值,因为我们已经有了 xml 结构。从用户值更新 xml 后,服务应将 xml 作为输入命中。
因此流程将类似于:用户输入(html) --> 更新 xml --> 将此 xml 作为输入传递给 SOAP Web 服务 --- 服务响应。
我不知道可以使用什么技术以及如何完成更新 xml 我从 php 和 xpath 开始,我不知道我是不是正确的。谁能帮我解决这个问题并提出解决方案?
此外,我的 xml 有 soap headers,所以我在将此 xml 与 xpath 一起使用时遇到问题,因为 xpath 使用纯 xml。对此也有解决方案吗?
java,后端开发使用springs
如果您有 java 平台,那么此解决方案将对您有所帮助。 为此,我创建了新的 Web 应用程序项目并使用了 Web 服务类别中的 Web 服务 Wrom WSDL 向导。实施很简单:
@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);
}
}
如果不知道您正在使用的确切环境(目标 Web 服务、首选编程语言等),就很难提供准确的答案。但我会尝试一个笼统的答案。
使用 Web 服务
SOAP 网络服务经常(总是?)提供机器可读的描述,可以通过某些工具 "consumed" 生成您喜欢的语言的代码以与 API 交互。
例如,Salesforce 以 WSDL(Web 服务描述语言)文件的形式提供了针对给定帐户定制的 SOAP API 的描述。它是 XML,就像 SOAP requests/responses。对于我的应用程序,我使用 Visual Studio 在我的项目中使用 WSDL 文件创建对 Salesforce 的 API 的引用。其余的是通过简单的对象初始化和方法完成的。例如:
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 的服务,请搜索类似 "consume WSDL in [language of your choice]" 的内容。更好的是,查看目标 Web 服务是否有描述如何使用它的文档。
从网页发送数据
有许多工具可以从 HTTP POST 请求中检索信息并据此采取行动。我最熟悉 ASP.NET。你似乎很熟悉 PHP。
为简单起见,您需要尝试使用与接收用户输入的 Web 服务相同的语言来使用目标 Web 服务。我将提供一个类似于 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
对象自动生成并发送到您的目标网络服务。
同样,这是对一般问题的一般回答。如果您用更具体的细节更新您的问题,我会尝试用更有针对性的细节来编辑这个答案。