JAXB实例入门

[b]JAXB(Java Architecture for XML Binding)[/b],JDK标准规范,Java对象和XML之间的转换,和SAX/DOM不同的是无需关注XML解析细节。
[list]
[*]Marshalling – 把Java对象转换成XML
[*]Unmarshalling – 把XML转换成Java对象[/list]
[b]版本:[/b]
* JDK1.6开始提供JAXB 2.0(建议使用最新版JDK)
* 低于JDK1.6的版本需要下载jaxb-api.jar和jaxb-impl.jar
* JAXB还有JDK以外的很多第三方实现,比如:EclipseLink MOXy

以下代码都去掉了Bean的Setter/Getter,具体可执行的完整工程代码,可从附件下载。

[b](1) 基本[/b]

[b]Java对象 -> XML[/b]

@XmlRootElement
public class Sample {
private int id;
private String name;
private boolean flag;
}


Sample s = new Sample();
s.setId(101);
s.setName("basicObj2XML");
s.setFlag(false);

StringWriter w = new StringWriter();
// JAXB是JDK封装好的解析器
JAXB.marshal(s, new StreamResult(w)); // 输出到字符串
System.out.println(w.toString());

[quote]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sample>
<flag>false</flag>
<id>101</id>
<name>basicObj2XML</name>
</sample>
[/quote]

转换后的XML内容可以直接输出到其他流(比如:控制台、文件等)

Sample s = new Sample();
s.setId(102);
s.setName("basicObj2Output");
s.setFlag(false);

JAXB.marshal(s, System.out); // 输出到控制台
JAXB.marshal(s, new File("d:\\jaxb_sample.xml")); // 输出到文件


[b]XML -> Java对象[/b]

String xml = "<?xml version=\"1.0\"?>"
+ "<sample>"
+ " <id>103</id>"
+ " <name>basicXML2Obj</name>"
+ " <flag>false</flag>"
+ "</sample>";

StringReader r = new StringReader(xml);
Sample ss = JAXB.unmarshal(r, Sample.class);
System.out.println(ss.toString());


[b](2) 通过JAXBContext创建解析器[/b]

[b]创建Marshaller[/b]

JAXBContext jaxbContext = JAXBContext.newInstance(Sample.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.marshal(s, System.out);


[b]创建Unmarshaller[/b]

JAXBContext jaxbContext = JAXBContext.newInstance(Sample.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
StringReader r = new StringReader(xml);
Sample sample = unmarshaller.unmarshal(new StreamSource(r), Sample.class).getValue();
System.out.println(sample.toString());


[b]设置Marshaller属性[/b]
[b]marshaller.setProperty();[/b]

JAXBContext jaxbContext = JAXBContext.newInstance(Sample.class);
Marshaller marshaller = jaxbContext.createMarshaller();
// 设置格式化后输出
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// 设置字符集
marshaller.setProperty(Marshaller.JAXB_ENCODING, Charset.defaultCharset().name());
marshaller.marshal(s, System.out);


[b](3) 采用EclipseLink MOXy作为JAXB provider[/b]
1)下载导入eclipselink.jar
2)在POJO的包下新建jaxb.properties
[quote]#Sun JAXB
javax.xml.bind.context.factory=com.sun.xml.internal.bind.v2.ContextFactory
#Eclipse MOXy
#javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory [/quote]
*** SUN的JAXB实现会在xml中添加属性standalone="yes",而EclipseLink MOXy就不会。

[b](4) 监听器[/b]

[b]marshaller.setListener();[/b]

[b]Marshaller监听器[/b]

public class MarshallListener extends Marshaller.Listener {

public void beforeMarshal(Object source) {
System.out.println("BEFORE_MARSHAL fired");
}

public void afterMarshal(Object source) {
System.out.println("AFTER_MARSHAL fired");
}

}


JAXBContext jaxbContext = JAXBContext.newInstance(Sample.class);
Marshaller marshaller = jaxbContext.createMarshaller();
// 设置监听器(!!!Sun JAXB实现有Bug会被执行两次,而Eclipse MOXy能正确执行一次!!!)
marshaller.setListener(new MarshallListener());
marshaller.marshal(s, System.out);


[b]Unmarshaller监听器[/b]

public class UnmarshallListener extends Unmarshaller.Listener {

@Override
public void beforeUnmarshal(Object target, Object parent) {
System.out.println("BEFORE_UNMARSHAL fired");
}

@Override
public void afterUnmarshal(Object target, Object parent) {
System.out.println("AFTER_UNMARSHAL fired");
}

}


JAXBContext jaxbContext = JAXBContext.newInstance(Sample.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
// 设置监听器
unmarshaller.setListener(new UnmarshallListener());
StringReader r = new StringReader(xml);
Sample sample = unmarshaller.unmarshal(new StreamSource(r), Sample.class).getValue();
System.out.println(sample.toString());


[b](5) 注解[/b]

[b]设置内部标签顺序(默认是按标签字母排序)[/b]
[b]@XmlType(propOrder={"id", "name", "flag"})[/b]

@XmlRootElement
@XmlType(propOrder={"id", "name", "flag"})
public class SampleOrder {
private int id;
private String name;
private boolean flag;
}

[quote]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sampleOrder>
<id>501</id>
<name>marshallerTagOrder</name>
<flag>false</flag>
</sampleOrder>[/quote]

[b]把字段值作为属性(默认都是标签)[/b]
[b]@XmlAttribute[/b]

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class SampleAttribute {
@XmlAttribute
private int id;
private String name;
private boolean flag;
}

[quote]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sampleAttribute id="502">
<name>SampleAttribute</name>
<flag>false</flag>
</sampleAttribute>[/quote]

[b]不输出某个字段值[/b]
[b]@XmlTransient[/b]

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class SampleTransient {
private int id;
private String name;
@XmlTransient
private boolean flag;
}

[quote]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sampleTransient>
<id>503</id>
<name>SampleTransient</name>
</sampleTransient>[/quote]

[b]空值处理[/b]

[b]@XmlElement(nillable = true)[/b]


SampleEmpty s = new SampleEmpty();
s.setId(504);
s.setName("SampleEmpty");
s.setFlag(false);
s.setName1(null);
s.setName2("");
s.setName3(null);


@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class SampleEmpty {
private int id;
private String name;
private boolean flag;
private String name1;
private String name2;
@XmlElement(nillable = true)
private String name3;
}

[quote]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sampleEmpty>
<id>504</id>
<name>SampleEmpty</name>
<flag>false</flag>
<name2></name2>
<name3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</sampleEmpty>[/quote]

[b]变更输出标签属性名称[/b]

[b]@XmlRootElement(name="foobar-tag")
@XmlAttribute(name="foobar-id")
@XmlElement(name="foobar-value")[/b]


@XmlRootElement(name="foobar-tag")
@XmlAccessorType(XmlAccessType.FIELD)
public class SampleName {
@XmlAttribute(name="foobar-id")
private int id;
@XmlElement(name="foobar-value")
private String name;
private boolean flag;
}

[quote]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<foobar-tag foobar-id="505">
<foobar-value>SampleName</foobar-value>
<flag>false</flag>
</foobar-tag>[/quote]

[b]Bean类型[/b]

@XmlRootElement
public class SampleBeanNested {
private int id;
private String name;
private boolean flag;
private People people;
}

public class People {
private int id;
private String name;
}

[quote]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sampleBeanNested>
<flag>false</flag>
<id>506</id>
<name>SampleBeanNested</name>
<people>
<id>100</id>
<name>People</name>
</people>
</sampleBeanNested>[/quote]

[b]List类型[/b]

[b]【字符串】默认[/b]


@XmlRootElement
public class SampleStringList1 {
private int id;
private String name;
private boolean flag;
private List<String> emailAddresses;
}

[quote]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sampleStringList1>
<emailAddresses>a1.rensanning@gmail.com</emailAddresses>
<emailAddresses>a2.rensanning@gmail.com</emailAddresses>
<emailAddresses>a3.rensanning@gmail.com</emailAddresses>
<flag>false</flag>
<id>507</id>
<name>SampleStringList1</name>
</sampleStringList1>[/quote]

[b]@XmlElementWrapper[/b]


@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class SampleStringList2 {
private int id;
private String name;
private boolean flag;
@XmlElementWrapper(name="email-addresses")
@XmlElement(name="email-address")
private List<String> emailAddresses;
}

[quote]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sampleStringList2>
<id>508</id>
<name>SampleStringList2</name>
<flag>false</flag>
<email-addresses>
<email-address>b1.rensanning@gmail.com</email-address>
<email-address>b2.rensanning@gmail.com</email-address>
<email-address>b3.rensanning@gmail.com</email-address>
</email-addresses>
</sampleStringList2>[/quote]

[b]@XmlList[/b]


@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class SampleStringList3 {
private int id;
private String name;
private boolean flag;
@XmlList
private List<String> emailAddresses;
}

[quote]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sampleStringList3>
<id>509</id>
<name>SampleStringList3</name>
<flag>false</flag>
<emailAddresses>c1.rensanning@gmail.com c2.rensanning@gmail.com c3.rensanning@gmail.com</emailAddresses>
</sampleStringList3>[/quote]

[b]【Bean】默认[/b]


@XmlRootElement
public class SampleBeanList1 {
private int id;
private String name;
private boolean flag;
private List<People> peoples;
}

[quote]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sampleBeanList1>
<flag>false</flag>
<id>510</id>
<name>SampleBeanList1</name>
<peoples>
<id>100</id>
<name>People1</name>
</peoples>
<peoples>
<id>200</id>
<name>People2</name>
</peoples>
<peoples>
<id>300</id>
<name>People3</name>
</peoples>
</sampleBeanList1>[/quote]

[b]@XmlElementWrapper[/b]


@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class SampleBeanList2 {
private int id;
private String name;
private boolean flag;
@XmlElementWrapper(name="list")
@XmlElement(name="people")
private List<People> peoples;
}

[quote]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sampleBeanList2>
<id>511</id>
<name>SampleBeanList2</name>
<flag>false</flag>
<list>
<people>
<id>100</id>
<name>People1</name>
</people>
<people>
<id>200</id>
<name>People2</name>
</people>
<people>
<id>300</id>
<name>People3</name>
</people>
</list>
</sampleBeanList2>[/quote]

[b]@XmlElements[/b]


@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class SampleBeanList3 {
private int id;
private String name;
private boolean flag;
@XmlElementWrapper(name="list")
@XmlElements( {
@XmlElement(name = "man", type = Man.class),
@XmlElement(name = "woman", type = Woman.class)
})
private List<People> peoples;
}

[quote]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sampleBeanList3>
<id>512</id>
<name>SampleBeanLis3</name>
<flag>false</flag>
<list>
<man>
<id>100</id>
<name>Man</name>
<attr1>Attr1</attr1>
</man>
<woman>
<id>200</id>
<name>Woman</name>
<attr2>Attr2</attr2>
</woman>
</list>
</sampleBeanList3>[/quote]

[b]枚举类型[/b]

[b]@XmlEnum、@XmlEnumValue[/b]


@XmlEnum(Integer.class)
@XmlType
public enum BloodType {
@XmlEnumValue("1") A,
@XmlEnumValue("2") B,
@XmlEnumValue("3") O,
@XmlEnumValue("4") AB
}

@XmlRootElement
public class SampleEnum {
private int id;
private String name;
private boolean flag;
private BloodType bloodType;
}

[quote]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sampleEnum>
<bloodType>2</bloodType>
<flag>false</flag>
<id>513</id>
<name>SampleEnum</name>
</sampleEnum>[/quote]

[b](6) 适配器 [/b]

[b]@XmlJavaTypeAdapter[/b]


public class DateAdapter extends XmlAdapter<String, Date> {

private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");

public Date unmarshal(String v) throws Exception {
return dateFormat.parse(v);
}

public String marshal(Date v) throws Exception {
return dateFormat.format(v);
}

}

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class SampleDateAdapter {
private int id;
private String name;
private boolean flag;
@XmlJavaTypeAdapter(DateAdapter.class)
private Date date;
}

[quote]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sampleDateAdapter>
<id>601</id>
<name>SampleDateAdapter</name>
<flag>false</flag>
<date>2017/06/09 09:52:26</date>
</sampleDateAdapter>[/quote]

[b](7) Schema检验[/b]

[b]SampleSchema.xsd[/b]

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="SampleSchema">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="flag" type="xs:boolean" />
</xs:sequence>
<xs:attribute name="id" type="xs:int" />
</xs:complexType>
</xs:element>

</xs:schema>


[b]marshaller.setSchema();[/b]


@XmlRootElement(name="SampleSchema")
@XmlAccessorType(XmlAccessType.FIELD)
public class SampleSchema {
@XmlAttribute
private int id;
private String name;
private boolean flag;
}


SampleSchema s = new SampleSchema();
s.setId(701);
s.setName("SampleSchema");
s.setFlag(false);

ClassLoader classLoader = new Main().getClass().getClassLoader();
File schemaFile = new File(classLoader.getResource("SampleSchema.xsd").getFile());

SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(schemaFile);

JAXBContext jaxbContext = JAXBContext.newInstance(SampleSchema.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// 设置Schema
marshaller.setSchema(schema);
marshaller.marshal(s, System.out);

[quote]<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SampleSchema id="701">
<name>SampleSchema</name>
<flag>false</flag>
</SampleSchema>[/quote]

[b]validator.validate(source);[/b]


SampleSchema s = new SampleSchema();
s.setId(702);
s.setName("marshallerValidator");
s.setFlag(false);

ClassLoader classLoader = new Main().getClass().getClassLoader();
File schemaFile = new File(classLoader.getResource("SampleSchema.xsd").getFile());

SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(schemaFile);

JAXBContext jaxbContext = JAXBContext.newInstance(SampleSchema.class);

// 校验XML
JAXBSource source = new JAXBSource(jaxbContext, s);
Validator validator = schema.newValidator();
validator.setErrorHandler(new CustomValidationErrorHandler());
validator.validate(source);

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(s, System.out);


[b](8) 捕获事件[/b]

[b]marshaller.setEventHandler();[/b]


public class CustomEventHandler implements ValidationEventHandler {

@Override
public boolean handleEvent(ValidationEvent event) {
System.out.println(event.getSeverity());

if (event.getSeverity() == ValidationEvent.ERROR
|| event.getSeverity() == ValidationEvent.FATAL_ERROR) {
ValidationEventLocator locator = event.getLocator();
System.out.println("Line:Col[" + locator.getLineNumber() + ":" + locator.getColumnNumber() + "]");
throw new RuntimeException(event.getMessage(), event.getLinkedException());
}
return true;
}

}


JAXBContext jaxbContext = JAXBContext.newInstance(Sample.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
// 设置事件处理器
unmarshaller.setEventHandler(new CustomEventHandler());
StringReader r = new StringReader(xml);
Sample sample = unmarshaller.unmarshal(new StreamSource(r), Sample.class).getValue();
System.out.println(sample.toString());
空间节省算法在Rowhammer防御中的应用与优化 空间节省算法(Space-Saving)是一种高效的流式数据处理算法,主要用于在有限内存条件下实时识别数据流中的高频项。其核心原理是通过维护固定大小的计数器表,动态跟踪最活跃的元素,适用于处理无限数据流场景。该算法在内存安全领域具有重要价值,特别是在Rowhammer攻击防御中,能够有效检测异常高频访问的DRAM行地址。通过结合计数器衰减策略(如DSAC)和混合架构设计,空间节省算法可以在保证低硬件开销的同时,提供高精度的攻击检测能力。这些技术已成功应用于现代DDR5内存控制器,展现出优异的工程实践价值。 阅读详情

相关推荐

智能问数产品背后的Agent技术揭秘:从任务分解到工具调用的完整流程

本文深入解析智能问数产品背后的Agent技术,从任务分解到工具调用的完整流程。通过大模型驱动的语义理解和动态工具调度,Agent系统能高效处理复杂数据分析需求,显著提升响应速度和准确率。文章详细介绍了模块化架构、任务分解机制、动态工具调用及双通道记忆系统等核心技术,展示了大模型时代的新型数据分析范式。

weixin_30399821的博客 439

JAXB学习四 (理解JAXBContext)

在jaxb应用中,JAXBContext类可以说是使用JAXB API的入口点,就像是一道门,只有通过它才能进入到jaxb的世界里。   JAXBContext类提供的功能主要有: marshall unmarshall validate 在jaxb中,通常如果声明JAXBContext对象: JAXBContext jaxbContext = JAXBContext.newIn...

刘刚的空间 838

Keysight ADS新手必看:3分钟搞定TDR模拟的保姆级教程(附差分信号设置技巧)

本文为Keysight ADS新手提供TDR模拟的保姆级教程,详细介绍了从基础环境准备到差分信号设置的全流程。通过内置模板调用、待测器件连接和仿真结果解读,帮助用户快速掌握TDR模拟技术,特别包含差分信号配置技巧,提升信号完整性分析效率。

weixin_30872157的博客 197

JAXB如何显示出空标签,并正常进行解析和反解析?(终极解决方案)

今天项目上遇到了一个很令人无语的合作方,他们提供给我的xml中存在大量的类似于: <test/> 这样的空标签,我以前写的xml解析是不会将空标签显示出来的,不显示就代表没有,代表值为null。但是这样的标签利用JAXB解析进来的值却是"",是的,本来应该被解析为null的值现在被解析成了一个空字符串了!!! 于是,万般无奈的秃头沈开始寻找解决方案,最终锁定了两个备选方案: 1...

qq_35854728的博客 4410

.ipynb文件深度解析:从JSON结构到Jupyter Notebook高效使用指南

在Python开发与数据处理领域,交互式编程正成为探索数据与验证思路的高效方式。Jupyter Notebook作为最流行的交互式环境之一,其默认文件格式.ipynb本质是一个基于JSON的文本文件,内部通过单元格组织代码、说明文字与运行结果。理解其JSON结构,不仅有助于掌握Notebook的存储原理,更能为文件损坏修复、版本控制与自动化转换提供基础。依托对单元格类型、魔法命令及输出可视化的熟练运用,数据分析和数据可视化流程可以变得更为流畅。同时,借助VS Code、nbconvert等工具,开发者能将.

weixin_28839629的博客 350

jmeter5.4.1 使用案例

jmeter主要用于接口压力测试,模拟海量请求并发访问接口 1.下载jmeter https://jmeter.apache.org/download_jmeter.cgi 2.启动jemter 双击即可 3.配置jmeter 1.先更改语言 2.创建线程组 配置线程执行规划 3.创建http请求默认值 4.创建http请求 5.创建http信息头管理器 指定 Content-Type:application/json 6.创建响应断言 7.创建察看结果数 直接点击 执行 按.

SpringHASh的博客 1222

java jaxb解析xml_使用JAXB解析xml文件(二)

前面一章简单演示了JAXB的用法,这个章节主要梳理一下JAXB常见的几个注解1.@XmlRootElement用于类级别的注解,对应xml的跟元素,常与 @XmlType 和 @XmlAccessorType一起使用,主要的作用是映射xml的根节点2.@XmlElement将Java对象的属性映射为xml的节点,在使用@XmlElement时,可通过name属性改变java对象属性在xml中显示的...

weixin_39675963的博客 747

用Arduino Mega2560和TB6612驱动MG513电机,我踩过的坑和最佳实践

本文详细介绍了使用Arduino Mega2560和TB6612驱动模块控制MG513直流电机的实战经验,包括硬件连接、PWM配置、编码器信号处理等关键技巧。通过优化电源系统、信号线布局和软件控制算法,有效解决了电机抖动、转速不稳等常见问题,为机器人底盘和自动化项目提供了可靠解决方案。

weixin_42520573的博客 202

Jaxb 完全手册

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34087503的博客 324

从零打造音乐会级特雷门琴:原理、设计与调试全解析

电子乐器的工作原理通常基于信号生成与调制。特雷门琴作为世界上最早的电子乐器之一,其核心原理是利用射频振荡器和电容传感,将演奏者的手势变化转化为音高与音量信号。这种技术通过外差式混频实现音高控制,并利用压控放大器实现细腻的音量动态,其工程价值在于将抽象的空间位置信息精确映射为连续的音频参数。在音乐制作、声音艺术和交互装置等领域,这类技术为创造独特的演奏体验提供了基础。本文聚焦于如何从电路层面实现一台高稳定性的特雷门琴,详细阐述了从LC振荡器设计、天线场形优化到音色混合检波等关键环节,并分享了基于LTspice

weixin_34046298的博客 171

单机多环境部署apollo 2.3.0

理解apollo的整体架构后,对比nacos配置中心功能点,其设计的复杂度以及完整度相较nacos而言更为丰富 对于不同的环境,例如 FAT, PRO 在部署时进程已经完全物理隔离,并且每个环境config/adminservice依赖的数据也完全物理隔离(连接不同的db),在数据隔离与安全方面做的很完善,但同时也提升了架构的复杂度 而 portal 可以管理多个环境,单节点部署虽然有单点问题,但并不会影响业务从configservice读取配置, 挂掉只要重启就可以,只是在

Life is a starting point everywhere 1299

jaxb2.0入门实例(zz)

jaxb2.0入门实例(java -> xml)下载地址: https://jaxb.dev.java.net/servlets/ProjectDocumentList 下载完后:java -jar JAXB2_20061211.jar文章来源:http://www.javaresearch.org/article/64522.htmJDK6的新特性之二:使用JAXB2来实

世事,为之则易,不为则难! 2450

Python 爬虫实战:付费 IP 代理使用技巧与爬虫稳定性优化

付费IP代理实战指南:突破反爬与优化稳定性 本文系统讲解付费IP代理在爬虫项目中的高效应用方法。首先对比分析静态代理、动态代理和隧道代理的优缺点及适用场景,推荐高并发项目优先选择隧道代理。然后详细演示了主流代理服务商的集成方法,包括代理池的自动更新和健康检测机制。核心部分重点介绍了爬虫稳定性优化策略,如智能重试、频率控制和请求间隔优化等关键技术。最后通过压力测试验证优化效果,并提供成本控制方案,包括代理复用、错峰爬取等实用技巧。通过本教程,开发者可有效解决高并发爬虫中的IP封禁问题,显著提升系统稳定性和抗风

2503_91057718的博客 2450

jaxb2.0入门实例(java -> xml)

下载地址: https://jaxb.dev.java.net/servlets/ProjectDocumentList 下载完后:java -jar JAXB2_20061211.jar 文章来源:http://www.javaresearch.org/article/64522.htm JDK6的新特性之二:使用JAXB2来实现对象与XML之间的映射  JAXB是 ...

zhongzhihua 159

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

JAXB Architecture

两个很简单的入门例子: http://www.vogella.com/articles/JAXB/article.html http://www.mkyong.com/java/jaxb-hello-world-example/  更详细的描述JAXB Architecture http://docs.oracle.com/cd/E17802_01/webservices/we

我的学习成长日记 738

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

JAXB入门

为什么80%的码农都做不了架构师?>>> ...

weixin_34247032的博客 97

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jaxb的介绍,以及对jaxb的入门

介绍顺序按照: 1. JAXB的介绍 2. JAXB中的核心类以及相关类介绍    3. JAXB中的常用注解介绍 4. 使用演示展示 首先介绍下什么是JAXB? JAXB(Java Architecture for XML Binding) 是一项可以根据XML Schema产生Java类的技术。 该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方

qq383264679的专栏 2888

jaxb入门_JAXB教程–入门

jaxb入门 注意:请查看我们的Java XML绑定JAXB教程– ULTIMATE指南 什么是JAXB? JAXB代表用于XML绑定的Java体系结构。它用于将XML转换为java对象,并将java对象转换为XML。JAXB定义了一个用于在XML文档中读写Java对象的API。与SAX和DOM不同,我们不需要了解XML解析技术。 您可以使用JAXB执行两种操作 编组 :将...

最佳 Java 编程 376

JAXB介绍及实例(zz)

JAXB以其方便的XML数据处理能力可能会引起你的兴趣。你可能还不了解JAXB是什么,想要知道它到底有什么好处,如果这是你需要的,你才会再花时间去细细的研究它,或者你只需要使用最基本的功能。然而Sun关于JAXB的文档有80页之多。我想大部分人都没有耐心看完这样的长篇大论。本文以简短的篇幅介绍了JAXB的基本使用,算是先睹为快吧。本文附带的代码包括了JAXB1.0 early access版本和本

Crazy for Java!--narilee的专栏 4254

JAXB-3 JAXB API

3 JAXB API3 JAXB API3.1 JAXBContext 解读3.1.1 newInstance()3.1.2 createMarshaller()3.1.3 createUnmarshaller()3.1.4 createBinder()3.2 静态方法提供者 JAXB3.2.1 JAXBContext3.2.2 JAXB.unmarshal(...)3.2.3 JAXB.mars...

怀旧豆酱味的专栏 1万+

JAXB教程–入门

注意:请查看我们的Java XML绑定JAXB教程– ULTIMATE指南 什么是JAXB? JAXB代表用于XML绑定的Java体系结构。它用于将XML转换为java对象,并将java对象转换为XML。JAXB定义了一个用于在XML文档中读写Java对象的API。与SAX和DOM不同,我们不需要了解XML解析技术。 您可以使用JAXB执行两种操作 编组 :将Java对象...

最佳 Java 编程 8381

jaxb操作实例

以下内容是个人对jaxb技术的总结及操作实例讲解: 1、什么是jaxb?  写道 "JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简...

java人生 885

jaxb 尝试实例

读取xml对于应用软件来说是一个必不可少的工作,当然现在的jdk也提供了很好的处理xml方式,读写xml的库也挺多,包括有名的dom4j,不管使用任何的代码库,对于xml只是一个解析工作而已,不能马上绑定到java 对象。对于对象,每次都需要set 或者get相应的属性,当然也可以使用map 来保存xml配置。     于是,一种新的处理方式用于对象和xml之间的映射就变得非常需要,还好sun提供了jaxb,一种很方便的方式来处理java对象和xml内容。下面通过一个实例来体会一下。     看一下如下的x

hjxhjh的专栏 1107

JAXB简单应用

JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成,也方便生成,可以更好进行JavaBean和xml、JSON直接的互相转换

yyp0719的博客 2107

JAXB 深入显出 - JAXB 教程 导读

摘要: JAXB 作为JDK的一部分,能便捷地将Java对象与XML进行相互转换,本教程从实际案例来讲解JAXB 2 的那些事儿。完整版目录 XML 是各种应用程序之间进行数据传输的最常用的语言之一,而JAXB提供了一个快速便捷的方式将Java对象与XML进行转换。 JAXB 发展 JAXB 1.0 由Java 社区开发与维护。 在2006年,发布JAXB 2.0 版本后,成为了J...

随-记的专栏 2038

Web自动化测试AI化选型:从自修复到视觉回归的落地路线图

Web自动化测试的维护成本长期居高不下,元素定位脆弱、等待策略不稳、回归范围膨胀是三个核心痛点。AI技术正从三个具体环节切入:自修复定位、脚本自动生成、失败智能归因,让测试脚本的维护人力真正降下来。自修复能力解决选择器失效问题,视觉回归引擎消除UI细节假阳性,而开源组合如Playwright、Healenium、Applitools则可以零采购成本完成一轮可靠验证。选型不该凭“强烈安利”拍板,而应基于团队编码能力、业务动态频率、合规要求定义权重坐标系,再用黄金回归集和7天PoC评分表做可复现评测。本文提供一

weixin_34318326的博客 592
上一篇: Java Web项目中的Event
下一篇: 数据格式(CSV,XML,JSON,YAML)
wayne_ren
博客等级 码龄21年 60粉丝 300原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值