1

我在使用 Java Web 服务时遇到问题,因为我无法接受来自表单(由另一组开发)的 XML 输入。

在我不确定我是否正确设置之前没有使用过这样的服务,目前我想要它做的就是连接,所以方法是空的。

package com.what.service;

import java.io.File;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.swing.text.*;



@WebService

public class HouseGetForm {

    @WebMethod
    public String getRooms(String rooms) { 
        return "Number of Rooms: " + rooms;
    }

    @WebMethod
    public String getHouseType(String house) {
        return "House Type " + house;
    }

    @WebMethod
    public String getKitchenAppliances(String appliance) {
        return "Appliances " + appliance;
    }

我也有我的“服务器”课程,几乎是直接从教程中获得的。

package com.what.service;

import javax.xml.ws.Endpoint;


public class Server {

    public static void main(String[] args) {

        Endpoint.publish("http://localhost:9898/HouseGetForm", new HouseGetForm());

        System.out.println("House Get form Initailised.");

        System.out.println("Server Started...");


    }

}

你看,我不太确定整个过程是如何运作的,所以我在黑暗中磕磕绊绊。提交表单时,XML 是如何传递的?作为一个完整的文档,然后我必须在 Web 服务上找到各个字段值?如果是这样,这是如何完成的?

我真的需要用外行的术语知道如何在 Java Web 服务中获取 XML 输入(即表单数据),然后在 Java Web 服务方法中对其进行操作。

4

2 回答 2

3

在我不确定我是否正确设置之前没有使用过这样的服务,目前我想要它做的就是连接,所以方法是空的。

我建议您为此阅读 REST jersey 库教程。请阅读这篇文章REST


所以基本上发生的事情是您的表单通过 HTTP 而不是 HTML 文件提交 XML 文件。如果您想通过 Web 服务客户端 (REST) 接收 XML 数据。你必须声明一个方法

消耗

XML 数据。例如

@WebMethod
@Consumes("application/xml")
@Produces("application/xml")
public String test(String xmlData){
  System.out.println(xmlData); //reads xml data
  returns "<?xml version="1.0" encoding="ISO-8859-1"?><note>Hello!</note>"; //this will display the legit XML file on to browser instead of HTML document
}

浏览器上显示的合法 xml 文件示例

此外,您可以使用名为JAXB的强大库来获取此 xmlData 并立即转换为 JavaBean 对象。还让我向您展示总体情况(我想这就是您要问的)

这是一个WebMethod。如果您的客户想要使用您的 Web 服务,这就是他们将要调用的东西。

@WebMethod
@Consumes("application/xml")
@Produces("application/xml")
public String test(Person person){
  System.out.println(person.getFirstName()); //reads xml data
  returns "<?xml version="1.0" encoding="ISO-8859-1"?><note>Hello!</note>"; //this will display the legit XML file on to browser instead of HTML document
}

这是从客户端发送的人员的 XML 数据示例

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Person>
   <firstName>Temp</firstName>
   <lastName>Nick</lastName>
</Person>

当此文件到达方法 test(Person person); 使用 JAXB,此 XML 数据转换为下面的 Person 对象

  @XmlRootElement
    public class Person {
      private String firstName;
      private String lastName;

      public String getFirstName(){
        return fristName;
      }
      @XmlElement
      public void setFirstName(String firstName) {
         this.firstName = firstName;
      }

     //another getter and setter for lastName

  }
于 2013-01-30T11:08:50.487 回答
0

表单数据作为编码的 HTTP 交付。

我打赌你的 XML 是通过 HTTP POST 来的。您可以通过启动您的应用程序、在 Chrome 等浏览器中打开页面并打开 Wireshark 来查看在线发送的内容。

一旦了解了这一点,您就会意识到必须从 HTTP 请求中提取 XML 并将其序列化为 Java 对象。有些人喜欢 JAXB 来做这样的事情。

于 2013-01-30T11:00:56.397 回答