GVKun编程网logo

java 之 xml 之解析工具jaxp(java xml解析工具类)

3

对于java之xml之解析工具jaxp感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解javaxml解析工具类,并且为您提供关于DTOJavaSpringjava.lang.ClassNot

对于java 之 xml 之解析工具jaxp感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解java xml解析工具类,并且为您提供关于DTO Java Spring java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter、Groovy(conncet DB, generate xml, get response xml, compare two xml)、HDFD 四个配置文件(core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml )的简单介绍、JAVA - 解决:Java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException的宝贵知识。

本文目录一览:

java 之 xml 之解析工具jaxp(java xml解析工具类)

java 之 xml 之解析工具jaxp(java xml解析工具类)

一、jaxp的api查看
*jaxp是javase一部分
*jaxp解析器在jdk的javax.xml.parsers包里面
*共四个类:分别针对dom和sax解析使用的类
*dom解析类:
DocumentBuilder:解析器类
*这个一个抽象类,不能new
*得到方式:DocumentBuilderFactory.newDocumentBuild();
*包含的方法:
可以解析xml:parser(String uri) uri:文件路径 返回Document对象
*返回的Document是一个接口,父节点是Node,若在Document找不到的方法,可以在Node找
*Document的方法:
*getElementsByTagName(String tagname):可以得到标签,返回集合NodeList
*createElement(String tagName): 创建标签
*createTextNode(String data):创建文本
*Node的方法
*appendChild(Node newChild):把文本添加到标签下面
*removeChild(Node oldChild):删除节点
*getParentNode():获取父节点
*NodeList的方法
*getLength():得到集合的长度
*item(int index)下标获取到具体的值
*案例:
for(int i=0;i<list.getLength;i++){list.item(i);
DocumentBuilderFactory:解析器工厂
*sax解析器:
SAXParser:解析器类
SAXParserFactory:解析器工厂

 

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class TestJaxp {
    public static void main(String[] args) throws Exception
    {
        //查询所有name元素的值
        /**
         * 1、创建解析器工厂
         * 2、根据解析器工厂创建工厂
         * 3、解析xml返回document
         **/
        //创建解析工厂
        DocumentBuilderFactory buildFactory=DocumentBuilderFactory.newInstance();
        //创建解析器
        DocumentBuilder builder=buildFactory.newDocumentBuilder();
        //解析xml返回document
        Document document=builder.parse("src/person.xml");
        //得到所有元素节点
        NodeList nodeList=document.getElementsByTagName("name");
        //遍历读取元素内容
        for (int i = 0; i < nodeList.getLength(); i++) {
            Node name1=nodeList.item(i);
            String s=name1.getTextContent();//得到标签元素里面的内容
            System.out.println(s);
        }
        
    }
}



//添加
//1、创建解析器工厂
        //根据解析器工厂创建工厂
        //解析xml返回对象
        DocumentBuilderFactory buildFactory=DocumentBuilderFactory.newInstance();
        DocumentBuilder builder=buildFactory.newDocumentBuilder();
        Document document=builder.parse("src/test.xml");
        NodeList nodeList=document.getElementsByTagName("p1");
        Node p1=nodeList.item(0);
        Element sex1=document.createElement("sex");
        Text text1=document.createTextNode("");
        sex1.appendChild(text1);
        p1.appendChild(sex1);
        
        TransformerFactory transformerFactory=TransformerFactory.newInstance();
        Transformer transformer=transformerFactory.newTransformer();
        transformer.transform(new DOMSource(document),new StreamResult("src/test.xml"));

//修改
//1、创建解析器工厂
        //根据解析器工厂创建工厂
        //解析xml返回对象
        DocumentBuilderFactory buildFactory=DocumentBuilderFactory.newInstance();
        DocumentBuilder builder=buildFactory.newDocumentBuilder();
        Document document=builder.parse("src/test.xml");
        Node node=document.getElementsByTagName("sex").item(0);
        node.setTextContent("");
        
        TransformerFactory transformerFactory=TransformerFactory.newInstance();
        Transformer transformer=transformerFactory.newTransformer();
        transformer.transform(new DOMSource(document),new StreamResult("src/test.xml"));

//删除
//1、创建解析器工厂
        //根据解析器工厂创建工厂
        //解析xml返回对象
        DocumentBuilderFactory buildFactory=DocumentBuilderFactory.newInstance();
        DocumentBuilder builder=buildFactory.newDocumentBuilder();
        Document document=builder.parse("src/test.xml");
        Node node=document.getElementsByTagName("name").item(0);
        Node nodeParent=node.getParentNode();
        nodeParent.removeChild(node);
        TransformerFactory transformerFactory=TransformerFactory.newInstance();
        Transformer transformer=transformerFactory.newTransformer();
        transformer.transform(new DOMSource(document),new StreamResult("src/test.xml"));

//递归遍历
    //1、创建解析器工厂
        //根据解析器工厂创建工厂
        //解析xml返回对象
        DocumentBuilderFactory buildFactory=DocumentBuilderFactory.newInstance();
        DocumentBuilder builder=buildFactory.newDocumentBuilder();
        Document document=builder.parse("src/test.xml");
        list1(document);
    }

    private static void list1(Node node) {
        // TODO Auto-generated method stub
        if(node.getNodeType()==Node.ELEMENT_NODE)
        {
            System.out.println(node.getNodeName());
        }
        
        NodeList nodelist=node.getChildNodes();
        for (int i = 0; i < nodelist.getLength(); i++) {
            Node node1=nodelist.item(i);
            list1(node1);
        }
    }

 

DTO Java Spring java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter

DTO Java Spring java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter

如何解决DTO Java Spring java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter

我正在使用 JWT,我已经添加了登录端点并添加了 DTO

  1. public class UserDto {
  2. private String user;
  3. private String password;
  4. public String getUser() {
  5. return user;
  6. }
  7. public void setUser(String user) {
  8. this.user = user;
  9. }
  10. public String getpassword() {
  11. return password;
  12. }
  13. public void setPassword(String password) {
  14. this.password = password;
  15. }
  16. }
  17. @PostMapping("user")
  18. @ResponseStatus(HttpStatus.CREATED)
  19. @ResponseBody
  20. public User login(@RequestBody UserDto user) {
  21. String token = getJWTToken(user.getUser());
  22. User newuser = new User();
  23. newuser.setUsername(user.getpassword());
  24. newuser.setToken(token);
  25. return newuser;
  26. }

但是当我调用端点时:

enter image description here

2021-06-03 16:46:56.848 错误 94126 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() 用于 带有路径 [] 的上下文中的 servlet [dispatcherServlet] 抛出异常 [处理程序调度失败;嵌套异常是 java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter] 与 根本原因

java.lang.classNotFoundException: javax.xml.bind.DatatypeConverter at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636) ~[na:na] 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182) ~[na:na] 在 java.base/java.lang.classLoader.loadClass(ClassLoader.java:519) ~[na:na] 在 io.jsonwebtoken.impl.Base64Codec.encode(Base64Codec.java:21) ~[jjwt-0.9.1.jar:0.9.1] 在 io.jsonwebtoken.impl.Base64UrlCodec.encode(Base64UrlCodec.java:22) ~[jjwt-0.9.1.jar:0.

解决方法

从 Java SE 9 的默认类路径中删除了 JAXB API。这就是您面临 ClassNotFoundError 的原因:

  1. java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter

您可以按照 this great SO question 中的建议尝试不同的方法再次包含它们,但可能的方法是更新您的 jjwt 依赖项:问题已在 this 中描述和 this other Github 问题,并且应该从库的 0.10.0 版本开始修复。

请注意,从那个版本开始,原来的 jjwt 库被分成了几个,你需要修改你的依赖项。请考虑阅读图书馆changelog

Groovy(conncet DB, generate xml, get response xml, compare two xml)

Groovy(conncet DB, generate xml, get response xml, compare two xml)

import groovy.sql.sql
import groovy.xml.MarkupBuilder
import org.custommonkey.xmlunit.*

//Conect to DB and get the nessecery data to generate the expected Xml.
sql sql=context.dbConnection;
def writer = new StringWriter();
def xml = new groovy.xml.MarkupBuilder(writer)
xml.RetailerGroups(){
   RetailerGroup(Name:"Checkout",Id:"CO")
  
   {
   Retailers(){
    Retailer(Name:"Acme",Id:"Acm")
    Retailer(Name:"Acme2",Id:"Acm2")
    def res = sql.firstRow("select scdprj.user3 as ''Brand'',"
    + "schedwin.unix_date_conv (scdslg.air_start) as ''StartDate'',"
    + "schedwin.unix_date_conv (scdslg.air_end) as ''EndDate'',"
    + "scdprj.cl_id as AdvertiserId,clnt.name + '' '' + ''-''+ '' '' + user3 as CampaignName,clnt.name as AdvertiserName "
    + "From schedwin.PROJECTS scdprj "
    + "Inner join schedwin.SLGUSAGE scdslg "
    + "ON scdprj.prj_id=scdslg.prj_id "
    + "Join schedwin.CLNT clnt "
    + "ON clnt.cl_id=scdprj.cl_id "
    + "Where  scdprj.cl_id=1228 and (scdprj.stat=1) and scdprj.formid=0 "
    + "AND (DATEDIFF(dd,schedwin.unix_date_conv(scdslg.AIR_END),''20090707'') < =0) "
    + "AND (DATEDIFF(dd,schedwin.unix_date_conv(scdslg.AIR_START),''20090707'') >= 0) ")
     }
     }
   RetailerGroup(Name:"Checkout",Id:"CO")
  }
 
def expectedResult = writer.toString()
log.info writer.toString() 
XMLUnit.setIgnoreWhitespace(true)

//Get the actual result
def step = testRunner.testCase.testSteps["retailer"]
def result = step.testRequest.response.contentAsstring
log.info result

//Check the actual result by expected result,and output the test result.def xmlDiff = new Diff(result,expectedResult)def s = xmlDiff.toString();File f = new File("c:/","d.txt"); if( !f.exists()){ f.createNewFile(); }try {    FileWriter fileWriter = new FileWriter(f,true);       if (s == "org.custommonkey.xmlunit.Diff[identical]"){       fileWriter.write("API: ''"+ step.name + "'' DV Result is  "+ "Passed/r/n");       }       else{        fileWriter.write("API: ''"+ step.name + "'' DV Result is  "+ "Failed/r/n");        }       fileWriter.close();        } catch (IOException e) {            e.printstacktrace();        }    

HDFD 四个配置文件(core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml )的简单介绍

HDFD 四个配置文件(core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml )的简单介绍

一 core-site.xml
<configuration>
<!--指定namenode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<!--用来指定使用hadoop时产生文件的存放目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/zkpk/hadoopdata</value>
</property>


二 hdfs-site.xml

<configuration>
<!--指定hdfs保存数据的副本数量-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>


三 mapred-site.xml
<configuration>
<!--告诉hadoop以后MR运行在YARN上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
四 yarn-site.xml <configuration> <!--nomenodeManager获取数据的方式是shuffle--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!--指定Yarn的老大(ResourceManager)的地址--> <property> <name>yarn.resourcemanager.address</name> <value>master:18040</value> </property> <configuration>

JAVA - 解决:Java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

JAVA - 解决:Java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

异常

JAVA - 解决:Java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

问题原因

  • 高版本的JDK中不包含javax.xml.bind包了!

解决方法

  • maven管理依赖,则在pom.xml中加入
<ependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>

关于java 之 xml 之解析工具jaxpjava xml解析工具类的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于DTO Java Spring java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter、Groovy(conncet DB, generate xml, get response xml, compare two xml)、HDFD 四个配置文件(core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml )的简单介绍、JAVA - 解决:Java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException等相关知识的信息别忘了在本站进行查找喔。

本文标签: