Java消息传递与JSON处理:JMS与JSON-PAPI详解
立即解锁
发布时间: 2025-08-18 02:36:48 阅读量: 2 订阅数: 4 

### Java消息传递与JSON处理:JMS与JSON-P API详解
#### 1. JMS消息传递应用实践
在完成消息传递应用程序的开发后,我们可以将其部署并运行。具体操作步骤如下:
1. 右键点击项目,选择“运行项目”,即可一次性完成部署和运行。
2. 短暂等待后,浏览器会自动弹出并显示应用程序的索引页面。
3. 在文本字段中输入一些文本,然后点击“提交”,我们可以在应用服务器日志中看到消息驱动Bean的`onMessage()`方法的输出。
使用JMS 2.0 API开发消息传递应用程序非常简单,借助NetBeans的代码生成和向导等功能,开发过程会更加便捷。在示例中,我们仅讨论了一种消息类型,即`javax.jms.TextMessage`。实际上,JMS有多种消息类型,具体如下表所示:
| 子接口 | 描述 |
| --- | --- |
| BytesMessage | 用于将字节数组作为消息发送。 |
| MapMessage | 用于将名值对作为消息发送。名称必须是字符串对象,值必须是基本类型或Java对象。 |
| ObjectMessage | 用于将可序列化对象作为消息发送。可序列化对象是实现了`java.io.Serializable`接口的任何类的实例。 |
| StreamMessage | 用于将Java基本类型的流作为消息发送。 |
| TextMessage | 用于将字符串作为消息发送。 |
#### 2. Java API for JSON Processing概述
JSON(JavaScript Object Notation的缩写)是一种轻量级的数据交换格式。与XML等其他数据交换格式相比,JSON的主要优势在于它既易于人类阅读,又易于计算机生成和解析,因此在许多现代Web应用程序中被广泛使用。
Java EE 7引入了Java API for JSON Processing(JSON - P),这是一个用于解析和生成JSON数据的标准Java EE API。JSON - P提供了两种解析和生成JSON数据的方式:对象模型API和流式API。
#### 3. JSON - P对象模型API
##### 3.1 使用JSON - P对象模型API生成JSON数据
当使用JSON - P对象模型API时,我们通常从调用`JsonObjectBuilder`接口实现的`add()`方法开始。该方法返回另一个`JsonObjectBuilder`接口实现的实例,我们可以将`JsonObject.add()`的调用链式连接起来,从而轻松地从Java对象创建JSON表示。以下是一个示例代码:
```java
package com.ensode.jsonpmodelapi;
//imports omitted
@Named
@RequestScoped
public class JsonPModelApiBean {
@Inject
private Person person;
private String jsonStr;
public String generateJson() {
JsonObjectBuilder jsonObjectBuilder =
Json.createObjectBuilder();
JsonObject jsonObject = jsonObjectBuilder.
add("firstName", person.getFirstName()).
add("middleName", person.getMiddleName()).
add("lastName", person.getLastName()).
add("gender", person.getGender()).
add("age", person.getAge()).
build();
StringWriter stringWriter = new StringWriter();
try (JsonWriter jsonWriter = Json.createWriter(stringWriter)) {
jsonWriter.writeObject(jsonObject);
}
setJsonStr(stringWriter.toString());
//JSF Dynamic navigation
return "generated_json";
}
//other methods omitted
}
```
在这个示例中,我们生成了一个简单的`Person` Java类的JSON表示,该类包含`firstName`、`middleName`、`lastName`等几个简单属性以及相应的getter和setter方法。
具体步骤如下:
1. 通过调用`Json`类的静态`createObjectBuilder()`方法获取`JsonObjectBuilder`接口的实现实例。
2. 调用`JsonObjectBuilder`的重载`add()`方法,添加JSON属性和对应的值。`add()`方法的第一个参数是JSON属性的名称,第二个参数是对应的值。以下是`JsonObjectBuilder.add()`的所有重载版本:
| add方法 | 描述 |
| --- | --- |
| add(String name, BigDecimal value) | 向生成的JSON对象中添加`BigDecimal`值的`JsonNumber`表示。 |
| add(String name, BigInteger value) | 向生成的JSON对象中添加`BigInteger`值的`JsonNumber`表示。 |
| add(String name, boolean value) | 根据传递的布尔值,向生成的JSON对象中添加`JsonValue.TRUE`或`JsonValue.FALSE`值。 |
| add(String name, double value) | 向生成的JSON对象中添加`double`值的`JsonNumber`表示。 |
| add(String name, int value) | 向生成的JSON对象中添加`int`值的`JsonNumber`表示。 |
| add(String name, JsonArrayBuilder builder) | 向生成的JSON对象中添加JSON对象数组。 |
| add(String name, JsonObjectBuilder builder) | 向生成的JSON对象中添加另一个JSON对象。 |
| add(String name, JsonValue value) | 向生成的JSON对象中添加`JsonValue`接口的实现。 |
| add(String name, long value) | 向生成的JSON对象中添加`long`值的`JsonNumber`表示。 |
| add(String name, String value) | 向生成的JSON对象中添加字符串值。 |
3. 调用`build()`方法,返回一个实现了`JsonObject`接口的实例。
4. 将`JsonObject`实例转换为JSON字符串。调用`Json`类的静态`createWriter()`方法,传入一个新的`StringWriter`实例作为参数,返回一个实现了`JsonWriter`接口的实例。然后调用`JsonWriter`的`writeObject()`方法,传入之前创建的`JsonObject`实例,将JSON数据写入`StringWriter`对象。最后,调用`StringWriter`的`toString()`方法获取JSON字符串表示。
##### 3.2 示例应用
示例应用是一个简单的Web应用程序,使用JSF填充CDI命名的Bean并从该Bean生成JSON字符串。以下是填充CDI命名Bean的简单JSF页面的标记:
```xml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>Object to JSON With the JSON-P Object Model API</title>
</h:head>
<h:body>
<h:form>
<h:panelGrid columns="2">
<h:outputLabel for="firstName" value="First Name"/>
<h:inputText id="firstName" value="#{person.firstName}"/>
<h:outputLabel for="middleName" value="Middle Name"/>
<h:inputText id="middleName" value="#{person.middleName}"/>
<h:outputLabel for="lastName" value="Last Name"/>
<h:inputText id="lastName" value="#{person.lastName}"/>
<h:outputLabel for="gender" value="Gender"/>
<h:inputText id="gender" value="#{person.gender}"/>
<h:outputLabel for="age" value="Age"/>
<h:inputText id="age" value="#{person.age}"/>
<h:panelGroup/>
<h:commandButton value="Submit" action="#{jsonPModelApiBean.generateJson()}"/>
</h:panelGrid>
</h:form>
</h:body>
</html>
```
`Person` Bean的源代码如下:
```java
package com.ensode.jsonpmodelapi;
import java.io.Serializable;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
@Named
@SessionScoped
public class Person implements Serializable {
private String firstName;
```
0
0
复制全文
相关推荐










