XStream

Get Start

  • http://x-stream.github.io/index.html
  • processAnnotations(DataSource.class); 使用annotation
  • autodetectAnnotations(true)
    1. 自动侦查注解将缓存所有类的类型. 所以性能会比较好
    2. 返序列化(XML -> JavaBean)无法使用
  • 无论是否有Annonation,都可以转化
  • 去除xml节点包名

Annonation

  • @XStreamAlias : 用于自定义xml节点名字,默认等于属性名字,root节点默认等于类名
  • @XStreamAsAttribute : xml节点属性,如果要修改属性名字,需要与@XStreamAlias 合用
  • @XStreamOmitField : 忽略此属性
  • @XStreamImplicit : 去除list的包装
    1. itemFieldName : list的节点的名字
  • @XStreamConverter : 用自定义类型转换原对象里的类型
    1. @XStreamConverter(value=ToAttributedValueConverter.class, strings={"content"}) : 将content节点的包装去除,只留下内容

Jackson

XML 和 Java Bean的转换

  • getting start
    1. 官网: https://www.baeldung.com/jackson
    2. com.fasterxml.jackson.dataformat:jackson-dataformat-xml
  • @JacksonXmlRootElement : 跟节点
    1. localname : 指定节点名字
    2. namespace : xmlns
  • @JacksonXmlProperty
    1. localname
    2. isAttribute = true : 是一个属性,而不是节点
    3. kotlin使用@get:JacksonXmlProperty
  • @JacksonXmlElementWrapper : 使用集合类定义多个节点或者子节点
    1. localname : 定义父节点名字
    2. 可以使用@JacksonXmlProperty定义子节点名字
    3. useWrapping =false : 不使用子节点
  • @JacksonXmlText
    1. 去除节点,只留下内容
    2. 用于创建有属性同时也有value的节点的value
  • XmlMapper
    1. xmlMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL) : 忽略空节点
    2. xmlMapper.configure( ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true ) : 添加头信息
    3. xmlMapper.enable(ToXmlGenerator.Feature.WRITE_XML_DECLARATION) : 添加头信息
    4. xmlMapper.writeValueAsString(s)

JsonRpc

Getting Start

  • Dependency

    1. implementation "com.fasterxml.jackson.dataformat:jackson-dataformat-xml"
    2. implementation "com.fasterxml.jackson.module:jackson-module-kotlin"
  • 提供接口

    1. interface 定义接口path: @JsonRpcService("/payment")
    2. impl 实现方法 : @AutoJsonRpcServiceImpl
  • 调用接口

    1. val client = JsonRpcHttpClient(URL("http://localhost:8080/xxx"), emptyMap<String, String>())
    2. val clientProxy = ProxyUtil.createClientProxy(javaClass.classLoader, XXXInterface::class.java, client)
  • 需要

          @Bean
          fun autoJsonRpcServiceImplExporter() = AutoJsonRpcServiceImplExporter().apply {
              setObjectMapper(jacksonObjectMapper())
          }
    
  • 不支持通过范型传入返回值类型

Request 和 Response使用http

    {
        id: 1
        method: crate
        params: [param1,2,3...]
    }

Velocity

Getting Start

  • implementation "org.springframework.boot:spring-boot-starter-velocity:1.4.7.RELEASE"

使用

  • VelocityEngine

      var velocityEngine = VelocityEngine()
      velocityEngine.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath")
      velocityEngine.setProperty("classpath.resource.loader.class", ClasspathResourceLoader::class.java.name)
      velocityEngine.init()
    
  • Template

      var template = velocityEngine.getTemplate("templates/${requestMethod}.vm")
      val context = VelocityContext()
      context.put("key", "value")  
      val writer = StringWriter()
      template.merge(context, writer)
      writer.buffer.toString()