【问题标题】:How to send data from a web page to XML and then to a SOAP web service如何将数据从网页发送到 XML,然后再发送到 SOAP Web 服务
【发布时间】:2018-05-09 13:49:10
【问题描述】:

到目前为止,我们的应用程序有一个后端 SOAP Web 服务,它使用 xml 输入来访问服务。但是现在我们正在尝试构建前端,它从用户那里获取一些输入并相应地只更新 xml 原子值,因为我们已经有了 xml 结构。从用户值更新 xml 后,服务应该使用该 xml 作为输入。

所以流程是这样的:用户输入(html) --> 更新 xml --> 将此 xml 作为输入传递给 SOAP Web 服务 --- 服务响应。

我不知道可以使用哪些技术以及如何完成,对于更新我从 php 和 xpath 开始的 xml,我不知道我是否正确。谁能帮我解决这个问题并提出解决方案?

另外,我的 xml 有肥皂头,所以我无法将此 xml 与 xpath 一起使用,因为 xpath 使用纯 xml。对此也有任何解决方案吗?

java,springs用于后端开发。

【问题讨论】:

    标签: java php xpath soap xml-generation


    【解决方案1】:

    如果不知道您正在使用的确切环境(目标 Web 服务、首选编程语言等),很难提供准确的答案。但我会尝试一个一般性的答案。

    使用网络服务

    SOAP Web 服务通常(总是?)提供机器可读的描述,可以被某些工具“使用”,生成您喜欢的语言的代码以与 API 交互。

    例如,Salesforce 以 WSDL(Web 服务描述语言)文件的形式提供针对给定帐户定制的 SOAP API 描述。它是 XML,类似于 SOAP 请求/响应。对于我的应用程序,我使用 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 的服务,请搜索“使用 [您选择的语言] 中的 WSDL”之类的内容。更好的是,看看目标 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 对象自动生成并发送到您的目标 Web 服务。

    同样,这是对一般问题的一般回答。如果您用更多细节更新您的问题,我会尝试用更有针对性的细节来编辑这个答案。

    【讨论】:

    • 你好 mac,谢谢你的回答,这很有帮助,但仍然如你所说,我会更新我的问题。
    • 我在前端使用 html、php 和 xpath 将值映射到 xml,之后我仍处于决策阶段以决定可以做什么。
    • @Harsha 是否有必要将 HTML 响应值导出到 XML,然后导出到 SOAP 请求?换句话说,除了存储要发送到 SOAP 服务的值之外,您还有 XML 文件的原因吗?我的回答假设我们可以省去中间步骤。但如果根据 XML 文件有其他要求,您可能需要进行一些 XML 处理。
    • 是的,因为 xml 有一个预定义的结构,服务会将其作为输入。而且它也有很少的输入值,最终用户不会给出。
    • 如果服务接受的 XML 结构是 SOAP,您应该能够使用如上所述的 WSDL 以编程方式访问 XML (SOAP) 结构。
    【解决方案2】:

    如果您有 java 平台,那么此解决方案将对您有所帮助。 为此,我创建了新的 Web 应用程序项目并在 Web 服务类别中使用了 Web Service 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);
        }
    
    }
    

    【讨论】:

    • 可能我将不得不对 wsdl 向导进行更多研究并尝试实现代码,因为我对它的了解有限。非常感谢您的回答。
    猜你喜欢
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多