提交 9b2e4812 编写于 作者: W wizardforcel

2020-06-10 11:10:30

上级 1a2876d4
......@@ -124,7 +124,7 @@ writer.write("Hello World");
3) [javax.xml.bind.annotation.adapters.XmlAdapter#marshal()和#unmarshal()](https://docs.oracle.com/javaee/5/api/javax/xml/bind/annotation/adapters/XmlAdapter.html "XmlAdapter")
使 Java 类型适应自定义封送处理。 将绑定类型转换为值类型。
使 Java 类型适应自定义编组处理。 将绑定类型转换为值类型。
这就是这个简单主题的全部内容。
......
......@@ -77,7 +77,7 @@ Summary
**另外,这很重要,因为您不希望调试由于某些外部系统中的错误而实际失败的测试用例。**
(顺便说一句,有时您的体系结构可能意味着您的代码在单元测试期间会触及静态变量。如果可以,请避免这样做,但如果不能这样做,请至少确保每个测试在运行之前将相关的静态操作重置为已知状态。 )
(顺便说一句,有时您的构可能意味着您的代码在单元测试期间会触及静态变量。如果可以,请避免这样做,但如果不能这样做,请至少确保每个测试在运行之前将相关的静态操作重置为已知状态。 )
#### 5.不进行单元测试配置设置
......
......@@ -26,7 +26,7 @@
#### 1.3 [HashMap 在 Java 中的工作方式](//howtodoinjava.com/java/collections/how-hashmap-works-in-java/ "How hashmap works in java")
如果您参加任何初级或中级面试,[`HashMap`](https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html)可能是讨论最多且最具争议的话题。 如果您知道 hashmap 在内部如何工作,您可以面对与`**HashMap**`相关的任何面试问题。 这篇文章将帮助您回答一些很好的问题,例如:
如果您参加任何初级或中级面试,[`HashMap`](https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html)可能是讨论最多且最具争议的话题。 如果您知道 hashmap 在内部如何工作,您可以面对与`HashMap`相关的任何面试问题。 这篇文章将帮助您回答一些很好的问题,例如:
* HashMap 如何存储键值对?
* HashMap 如何解决冲突?
......@@ -119,7 +119,7 @@ HashMap 不是线程安全的。 我们可以在并发应用中使用 **HashTabl
#### 1.13 [Java 主要方法](//howtodoinjava.com/java/related-concepts/a-mini-guide-to-main-method-in-java/ "A mini guide to main method in java")
有没有想过为什么`**main()**`是公共的,静态的和无效的? 在 Java 面试中,这不是一个经常问到的面试问题,但我仍然建议您阅读这篇文章来回答以下问题:
有没有想过为什么`main()`是公共的,静态的和无效的? 在 Java 面试中,这不是一个经常问到的面试问题,但我仍然建议您阅读这篇文章来回答以下问题:
* Java 主要方法语法?
* 为什么主要方法是公开的?
......
......@@ -169,7 +169,7 @@ Java 9 中的一些重要功能/ [更改是:](https://howtodoinjava.com/java9/
* 热点 JVM
* Java 命名和目录接口(JNDI)
* Java 平台调试器体系结构(JPDA)
* Java 平台调试器构(JPDA)
* Java 声音
* 合成代理类
......
......@@ -112,7 +112,7 @@ JMS 应用提供两种类型的管理对象:
#### 5.2 连接工厂
客户端使用的对象是[连接工厂](https://docs.oracle.com/javaee/6/api/javax/jms/ConnectionFactory.html),用于创建与提供程序的连接。 它在 JMS 生产者和 JMS 客户端之间创建连接。 当诸如发送者或接收者之类的 JMS 客户端在 JNDI 注册表中搜索该对象时,则 JMS 客户端会收到一个连接对象,这不仅仅是 JMS 生产者和 JMS 客户端之间的物理连接。 使用此连接,客户端可以与目标对象进行通信,以将消息发送或接收到队列或主题中。 让我们举一个例子来理解它发送消息:
客户端使用的对象是[连接工厂](https://docs.oracle.com/javaee/6/api/javax/jms/ConnectionFactory.html),用于创建与供应器的连接。 它在 JMS 生产者和 JMS 客户端之间创建连接。 当诸如发送者或接收者之类的 JMS 客户端在 JNDI 注册表中搜索该对象时,则 JMS 客户端会收到一个连接对象,这不仅仅是 JMS 生产者和 JMS 客户端之间的物理连接。 使用此连接,客户端可以与目标对象进行通信,以将消息发送或接收到队列或主题中。 让我们举一个例子来理解它发送消息:
```java
QueueConnectionFactory queueConnFactory = (QueueConnectionFactory) initialCtx.lookup ("primaryQCF");
......@@ -145,7 +145,7 @@ TopicSubscriber receiver = ses.createSubscriber(t);
#### 5.4 JMS 连接
该连接封装了与 JMS 提供程序的虚拟连接。 该连接实现了`Connection`接口,当它具有`ConnectionFactory`对象时,我们可以使用它来创建连接。
该连接封装了与 JMS 供应器的虚拟连接。 该连接实现了`Connection`接口,当它具有`ConnectionFactory`对象时,我们可以使用它来创建连接。
```java
Connection connection = connectionFactory.createConnection();
......@@ -228,7 +228,7 @@ JMS 客户端使用 JMS 消息在系统之间进行通信。 JMS 消息具有简
2. #### 消息属性
在消息属性中,我们可以创建和设置消息的属性。 消息属性是由应用设置或读取的自定义名称值对。 消息属性对于支持过滤消息很有用。 JMS API 提供了提供程序可以支持的一些预定义属性。 消息属性是可选的。
在消息属性中,我们可以创建和设置消息的属性。 消息属性是由应用设置或读取的自定义名称值对。 消息属性对于支持过滤消息很有用。 JMS API 提供了供应器可以支持的一些预定义属性。 消息属性是可选的。
3. #### 消息正文
......
# JAXB @XmlElementWrapper 注释示例
# JAXB `@XmlElementWrapper`注释示例
> 原文: [https://howtodoinjava.com/jaxb/xmlelementwrapper-annotation/](https://howtodoinjava.com/jaxb/xmlelementwrapper-annotation/)
**JAXB @XmlElementWrapper 注释**的 Java 示例及其在[编组](https://howtodoinjava.com/jaxb/marshaller-example/)[编组](https://howtodoinjava.com/jaxb/jaxb-unmarshaller-example/)操作期间的用法详细说明。
**JAXB `@XmlElementWrapper`注释**的 Java 示例及其在[编组](https://howtodoinjava.com/jaxb/marshaller-example/)[编组](https://howtodoinjava.com/jaxb/jaxb-unmarshaller-example/)操作期间的用法详细说明。
## 1\. @XmlElementWrapper 类型
## 1\. `@XmlElementWrapper`类型
1. 该注释生成围绕 XML 表示的包装器元素。
2. 它主要用于在集合周围产生包装 XML 元素。
3. 该注释可以与以下注释一起使用:`XmlElement``XmlElements``XmlElementRef``XmlElementRefs`XmlJavaTypeAdapter
3. 该注释可以与以下注释一起使用:`XmlElement``XmlElements``XmlElementRef``XmlElementRefs``XmlJavaTypeAdapter`
4. `@XmlElementWrapper`注释可以与以下程序元素一起使用:
* JavaBean 属性
* 非静态,非瞬态
* 非静态,非瞬态字段
## 2\. JAXB @XmlElementWrapper 示例
## 2\. JAXB `@XmlElementWrapper`示例
现在来看几个有关如何将`@XmlElementWrapper``@XmlElement`一起使用来更改 XML 表示形式的示例。
#### 2.1 使用@XmlElementWrapper 和@XmlElement(包装的集合)
#### 2.1 使用`@XmlElementWrapper`和`@XmlElement`(包装的集合)
```java
@XmlRootElement(name = "employee")
......@@ -55,7 +55,7 @@ public class Employee implements Serializable {
```
#### 2.2 仅使用@XmlElementWrapper
#### 2.2 仅使用`@XmlElementWrapper`
```java
@XmlRootElement(name = "employee")
......@@ -93,7 +93,7 @@ public class Employee implements Serializable {
```
#### 2.3 不要使用@XmlElementWrapper(未包装的集合)
#### 2.3 不要使用`@XmlElementWrapper`(未包装的集合)
```java
@XmlRootElement(name = "employee")
......@@ -133,4 +133,4 @@ public class Employee implements Serializable {
学习愉快!
参考: [XmlElementWrapper Java 文档](https://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/XmlElementWrapper.html)
\ No newline at end of file
参考: [`XmlElementWrapper` Java 文档](https://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/XmlElementWrapper.html)
\ No newline at end of file
# JAXB Marshaller 示例
# JAXB `Marshaller`(编组器)示例
> 原文: [https://howtodoinjava.com/jaxb/marshaller-example/](https://howtodoinjava.com/jaxb/marshaller-example/)
JAXB [`**Marshaller**`](https://docs.oracle.com/javase/10/docs/api/javax/xml/bind/Marshaller.html)接口负责管理将 Java 内容树即 **Java 对象转换为 XML** 数据的过程。 可以将 XML 编组到各种输出目标。
JAXB [`Marshaller`](https://docs.oracle.com/javase/10/docs/api/javax/xml/bind/Marshaller.html)接口负责管理将 Java 内容树即 **Java 对象转换为 XML** 数据的过程。 可以将 XML 编组到各种输出目标。
## 1\. JAXB 编组对象到 XML
......@@ -21,7 +21,7 @@ jaxbMarshaller.marshal(employeeObj);
```
#### 1.2 封送 XML 文件
#### 1.2 编组 XML 文件
```java
OutputStream os = new FileOutputStream( "employee.xml" );
......@@ -29,7 +29,7 @@ jaxbMarshaller.marshal( employeeObj, os );
```
#### 1.3 封送至 SAX ContentHandler
#### 1.3 编组至 SAX `ContentHandler`
假设`MyContentHandler`[`org.xml.sax.ContentHandler`](https://docs.oracle.com/javase/7/docs/api/org/xml/sax/ContentHandler.html) 的实例。
......@@ -38,7 +38,7 @@ jaxbMarshaller.marshal( employeeObj, new MyContentHandler() );
```
#### 1.4 封送 DOM 文件
#### 1.4 编组 DOM 文件
```java
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
......@@ -50,14 +50,14 @@ jaxbMarshaller.marshal( employeeObj, doc );
```
#### 1.5 封送并打印到控制台
#### 1.5 编组并打印到控制台
```java
m.marshal( employeeObj, new PrintWriter( System.out ) );
```
## 2\. JAXB 马歇尔属性
## 2\. JAXB `Marshaller`属性
```java
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
......@@ -66,17 +66,17 @@ jaxbMarshaller.setProperty("jaxb.formatted.output", Boolean.TRUE);
```
所有 JAXB 提供程序都必须支持以下属性集。 一些提供程序可能支持其他属性。
所有 JAXB 供应器都必须支持以下属性集。 一些供应器可能支持其他属性。
* **jaxb.encoding** - 编组 XML 数据时使用的输出编码。 如果未指定此属性,则默认情况下`Marshaller`将使用“ `UTF-8`”。
* **jaxb.formatted.output** - 值可以是`true``false``Marshaller`是否将使用换行符和缩进来格式化所得的 XML 数据。 默认值为`false`
* **jaxb.schemaLocation** – 允许客户端应用在生成的 XML 数据中指定`xsi:schemaLocation`属性。
* **jaxb.noNamespaceSchemaLocation** – 它允许客户端应用在生成的 XML 数据中指定`xsi:noNamespaceSchemaLocation`属性。
* **jaxb.fragment** – 它确定 Marshaller 是否将生成文档级事件。 值可以是`true``false`
* **`jaxb.encoding`** - 编组 XML 数据时使用的输出编码。 如果未指定此属性,则默认情况下`Marshaller`将使用“ `UTF-8`”。
* **`jaxb.formatted.output`** - 值可以是`true``false``Marshaller`是否将使用换行符和缩进来格式化所得的 XML 数据。 默认值为`false`
* **`jaxb.schemaLocation`** – 允许客户端应用在生成的 XML 数据中指定`xsi:schemaLocation`属性。
* **`jaxb.noNamespaceSchemaLocation`** – 它允许客户端应用在生成的 XML 数据中指定`xsi:noNamespaceSchemaLocation`属性。
* **`jaxb.fragment`** – 它确定`Marshaller`是否将生成文档级事件。 值可以是`true``false`
## 3.马歇尔回调方法
## 3.`Marshaller`回调方法
您可以通过 JAXB 注释类中的**自定义编组操作,例如 `Employee.java`。 您需要定义两个方法,这些方法将在编组程序处理该类之前和之后进行监听。 在这些方法中,您可以执行诸如设置额外字段之类的操作。**
您可以通过 JAXB 注释类中的**自定义编组操作**,例如 `Employee.java`。 您需要定义两个方法,这些方法将在编组程序处理该类之前和之后进行监听。 在这些方法中,您可以执行诸如设置额外字段之类的操作。
```java
package com.howtodoinjava.demo.model;
......
# JAXB 解组器示例
# JAXB `Unmarshaller`(解组器)示例
> 原文: [https://howtodoinjava.com/jaxb/jaxb-unmarshaller-example/](https://howtodoinjava.com/jaxb/jaxb-unmarshaller-example/)
[`JAXB Unmarshaller`](https://docs.oracle.com/javase/10/docs/api/javax/xml/bind/Unmarshaller.html)接口负责管理将 XML 数据反序列化为 Java 对象的过程。 可以将对象解组到各种输入源。
JAXB [`Unmarshaller`](https://docs.oracle.com/javase/10/docs/api/javax/xml/bind/Unmarshaller.html)接口负责管理将 XML 数据反序列化为 Java 对象的过程。 可以将对象解组到各种输入源。
## 1.如何将 XML 解组到对象
#### 1.1 创建解组器
通常,要创建 Unmarshaller,可以重用此代码。
通常,要创建`Unmarshaller`,可以重用此代码。
```java
JAXBContext jaxbContext = JAXBContext.newInstance( Employee.class );
......@@ -19,7 +19,7 @@ Employee employee = (Employee) jaxbUnmarshaller.unmarshal( xmlSource );
```
#### 1.2 从 InputStream 解组
#### 1.2 从`InputStream`解组
```java
InputStream inStream = new FileInputStream( "employee.xml" );
......@@ -46,7 +46,7 @@ Employee employee = (Employee) jaxbUnmarshaller.unmarshal(new StringReader(xmlSt
```
#### 1.5 从 org.w3c.dom.Node 解组
#### 1.5 从`org.w3c.dom.Node`解组
```java
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
......@@ -60,11 +60,11 @@ Employee employee = (Employee) jaxbUnmarshaller.unmarshal( document );
## 2\. JAXB 解组器属性
当前,Unmarshaller 上的所有 JAXB 提供程序都不需要**所有属性**。 但是,某些提供程序可能支持它们自己的一组提供程序特定属性。
当前,`Unmarshaller`上的所有 JAXB 供应器都不需要**所有属性**。 但是,某些供应器可能支持它们自己的一组供应器特定属性。
## 3.解组事件回调
您可以通过在 [JAXB 注释的](https://howtodoinjava.com/jaxb/jaxb-annotations/)类中添加这些回调方法**来自定义解组操作。 `Employee.java`。 您需要定义两个方法,这些方法将在**`Unmarshaller`处理该类之前和之后监听**。**
您可以通过在 [JAXB 注释的](https://howtodoinjava.com/jaxb/jaxb-annotations/)类中添加这些回调方法**来自定义解组操作**,例如`Employee.java`。 您需要定义两个方法,这些方法将在`Unmarshaller`处理该类之前和之后监听。
* `void beforeUnmarshal(Unmarshaller unmarshaller, Object parent) {}`
* `void afterUnmarshal(Unmarshaller unmarshaller, Object parent) {}`
......
......@@ -6,7 +6,7 @@
## 1)JAXB vs SAX vs DOM
Java 提供了许多读取 XML 文件并使用 XL 内容打印,在应用中使用或在 Java 对象中填充数据以进一步在应用生命周期中使用的方法。 用于此目的的三个主要 API 是 XML 的简单 API([`SAX`](http://www.saxproject.org/)),文档对象模型([`DOM`](https://www.w3.org/DOM/))和 XML 绑定的 Java 体系结构([`JAXB`](http://jaxb.java.net/))。
Java 提供了许多读取 XML 文件并使用 XML 内容打印,在应用中使用或在 Java 对象中填充数据以进一步在应用生命周期中使用的方法。 用于此目的的三个主要 API 是 XML 的简单 API([`SAX`](http://www.saxproject.org/)),文档对象模型([`DOM`](https://www.w3.org/DOM/))和 XML 绑定的 Java 架构([`JAXB`](http://jaxb.java.net/))。
* `SAX``DOM`解析器使用 [JAXP](https://jaxp.dev.java.net/) API 来解析 XML 文档。 两者都扫描文档并在逻辑上将其分解为离散的片段(例如,节点,文本和注释等)。
* `SAX`解析器从文档的开头开始,并将文档的每个片段按找到它的顺序传递给应用。 内存中没有保存任何内容,因此无法进行任何内存中的操作。
......
......@@ -61,7 +61,7 @@ public class Department implements Serializable {
```
#### 2.2 添加 jaxb.properties
#### 2.2 添加`jaxb.properties`
当您获得`JAXBContext`的实例时,JAXB 将检查`jaxb.properties`文件并构造上下文。 在这里,您从 MOXy 库中注入了`JAXBContextFactory`
......@@ -149,7 +149,7 @@ Employee [id=1, firstName=Lokesh, lastName=Gupta, department=Department [id=101,
## 4.将 JSON 字符串转换为 Java 对象
您可以获取 String 形式的 JSON,然后直接填充到 Java 对象。
您可以获取字符串形式的 JSON,然后直接填充到 Java 对象。
```java
package com.howtodoinjava.demo;
......@@ -198,7 +198,7 @@ public class JaxbExample
```
Program Output:
程序输出:
```java
Employee [id=1, firstName=Lokesh, lastName=Gupta, department=Department [id=101, name=IT]]
......
......@@ -194,7 +194,7 @@ public class JaxbExample
```
Program output:
程序输出:
```java
{
......
......@@ -2,7 +2,7 @@
> 原文: [https://howtodoinjava.com/jaxb/jaxb-example-marshalling-and-unmarshalling-hashmap-in-java/](https://howtodoinjava.com/jaxb/jaxb-example-marshalling-and-unmarshalling-hashmap-in-java/)
我们知道 [JAXB(用于 XML 绑定的 Java 体系结构)](https://en.wikipedia.org/wiki/Java_Architecture_for_XML_Binding "jaxb")允许 Java 开发人员将 Java 类映射到 XML 表示形式。 JAXB 提供了两个主要功能:将 Java 对象编组为 XML 的能力和相反的功能,即将 XML 解组为 Java 对象的能力。 JAXB 主要用于实现 Web 服务或任何其他此类客户端接口的应用,在该应用中,数据需要以 XML 格式(而不是 HTML 格式)传输,而对于可视客户端(如 Web 浏览器)来说,HTML 格式是默认格式。
我们知道 [JAXB(用于 XML 绑定的 Java 构)](https://en.wikipedia.org/wiki/Java_Architecture_for_XML_Binding "jaxb")允许 Java 开发人员将 Java 类映射到 XML 表示形式。 JAXB 提供了两个主要功能:将 Java 对象编组为 XML 的能力和相反的功能,即将 XML 解组为 Java 对象的能力。 JAXB 主要用于实现 Web 服务或任何其他此类客户端接口的应用,在该应用中,数据需要以 XML 格式(而不是 HTML 格式)传输,而对于可视客户端(如 Web 浏览器)来说,HTML 格式是默认格式。
一个很好的例子是 facebook API。 Facebook 已通过 [RESTful Web 服务](//howtodoinjava.com/restful-web-service/ "resteasy tutorials")的形式通过一些开放的端点公开了其服务,您在其中单击 URL 并发布了一些参数,而 API 以 xml 格式返回数据。 现在由您决定如何使用这些数据。
......
......@@ -2,7 +2,7 @@
> 原文: [https://howtodoinjava.com/jaxb/jaxb-exmaple-marshalling-and-unmarshalling-list-or-set-of-objects/](https://howtodoinjava.com/jaxb/jaxb-exmaple-marshalling-and-unmarshalling-list-or-set-of-objects/)
我们知道 [JAXB(用于 XML 绑定的 Java 体系结构)](https://en.wikipedia.org/wiki/Java_Architecture_for_XML_Binding "jaxb")允许 Java 开发人员将 Java 类映射到 XML 表示形式。 JAXB 提供了两个主要功能:将 Java 对象编组为 XML 的能力和相反的功能,即将 XML 解组为 Java 对象的能力。 JAXB 主要用于实现 Web 服务或任何其他此类客户端接口的应用,在该应用中,数据需要以 XML 格式(而不是 HTML 格式)传输,而对于可视客户端(如 Web 浏览器)来说,HTML 格式是默认格式。
我们知道 [JAXB(用于 XML 绑定的 Java 构)](https://en.wikipedia.org/wiki/Java_Architecture_for_XML_Binding "jaxb")允许 Java 开发人员将 Java 类映射到 XML 表示形式。 JAXB 提供了两个主要功能:将 Java 对象编组为 XML 的能力和相反的功能,即将 XML 解组为 Java 对象的能力。 JAXB 主要用于实现 Web 服务或任何其他此类客户端接口的应用,在该应用中,数据需要以 XML 格式(而不是 HTML 格式)传输,而对于可视客户端(如 Web 浏览器)来说,HTML 格式是默认格式。
一个很好的例子是 facebook API。 Facebook 已通过 [RESTful Web 服务](//howtodoinjava.com/restful-web-service/ "resteasy tutorials")的形式通过一些开放的端点公开了其服务,您在其中单击 URL 并发布了一些参数,而 API 以 xml 格式返回数据。 现在由您决定如何使用这些数据。
......@@ -28,7 +28,7 @@
## 2)模型类别
我创建了一个模型类“ `Employee`”,它具有一些公共字段。 我想构建可以解析一组`employees`的代码。 请注意,JAXB 在最重要的类上需要 [`@XmlRootElement`](https://docs.oracle.com/javaee/5/api/javax/xml/bind/annotation/XmlRootElement.html "XmlRootElement") 注解,我们将对其进行封送或取消封送
我创建了一个模型类“ `Employee`”,它具有一些公共字段。 我想构建可以解析一组`employees`的代码。 请注意,JAXB 在最重要的类上需要 [`@XmlRootElement`](https://docs.oracle.com/javaee/5/api/javax/xml/bind/annotation/XmlRootElement.html "XmlRootElement") 注解,我们将对其进行编组或取消编组
`ArrayList`类是集合框架的一部分,它没有任何 JAXB 注解。 因此,我们需要另外一个类别“ `Employees`”,该类别将代表一组雇员。 现在,在该类中,我们可以添加任何我们喜欢的注释。
......
......@@ -107,7 +107,7 @@ public class XPathExample
```
Program output:
程序输出:
```java
Lokesh
......
......@@ -8,7 +8,7 @@
## Tomcat 的架构
**Tomcat 的体系结构**由一系列功能组件组成,可以根据明确定义的规则进行组合。
**Tomcat 的构**由一系列功能组件组成,可以根据明确定义的规则进行组合。
![Tomcat Architecture](img/3c43c5e87ebcfa1b2ff3850bcd827fc6.png)
......
......@@ -23,7 +23,7 @@ Table of Contents
## 1.什么时候使用工厂模式?
工厂模式引入了**类之间的松散耦合**,这是在设计应用体系结构时应考虑并应用的最重要的原理。 通过针对抽象实体(而不是具体的实现)进行编程,可以在应用体系结构中引入松耦合。 这不仅使我们的体系结构更加灵活,而且不那么脆弱。
工厂模式引入了**类之间的松散耦合**,这是在设计应用架构时应考虑并应用的最重要的原理。 通过针对抽象实体(而不是具体的实现)进行编程,可以在应用架构中引入松耦合。 这不仅使我们的架构更加灵活,而且不那么脆弱。
一张图片胜过千言万语。 让我们看看工厂实施的样子。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册