小编gga*_*iao的帖子

JAXB - 仅为元素的特定子类型设置XmlAdapter?

我必须生成一个xml元素,它可以具有任何"基本类型"(xsd:string,xsd:boolean等)作为值.例子:

<field xsi:type="xsd:string" name="aString">String Value</field>
<field xsi:type="xsd:dateTime" name="aDate">2011-10-21</field>
<field xsi:type="xsd:dateTime" name="aDateTime">2011-10-21T12:00:00</field>
...
Run Code Online (Sandbox Code Playgroud)

所以,我使用这个实现使JAXB决定xsi:type原始类型:

public class Field {
    @XmlAttribute
    private String name;

    @XmlElement
    Object value;
}
Run Code Online (Sandbox Code Playgroud)

并且它按预期工作但所有java.util.Date获取类型xs:dateTime...

现在我只想在'value'对象是java.util.Date的一个实例时才改变marshaller的行为来获取这样的字段:

<field xsi:type="xsd:date" name="aDate">2011-10-21</field>
<field xsi:type="xsd:dateTime" name="aDateTime">2011-10-21T12:00:00</field>
Run Code Online (Sandbox Code Playgroud)

所以我创建了一个适配器,但如果我尝试这个:

@XmlElement
@XmlJavaTypeAdapter(DateAdapter.class)
Object value;
Run Code Online (Sandbox Code Playgroud)

适配器必须处理java.lang.Object类型

public class DateAdapter extends XmlAdapter<String, Object> {...}
Run Code Online (Sandbox Code Playgroud)

但我不想为所有其他对象(整数,双等)松散JAXB marshallers ...

有一种方法可以为元素的特定子类型设置适配器吗?

xml jaxb xml-serialization

6
推荐指数
1
解决办法
1639
查看次数

maven-sonar-plugin 可以做本地分析吗?

我正在配置一个多模块 maven 项目,该项目强制在验证阶段执行声纳:声纳

我还使用声纳的 build-breaker-plugin 来避免在声纳抛出一些警报时部署模块。

这种方法的问题是开发人员应该去声纳服务器检查警报。这还不错,但是如果多个用户尝试同时分析同一个模块,则不可能知道上次/当前分析是否有您的警报。

上下文:我们有一个 CI 系统,每小时构建所有模块。因此,有时这会与某些开发人员部署(强制分析)发生冲突

恕我直言,只有 CI 系统应该将分析提交给声纳服务器,因为 CI 具有持续提交和部署的代码。但是开发人员应该只在本地检查他的更改。

那么,为什么我们要在开发人员构建中强制进行分析?避免部署不遵守代码质量阈值的模块(声纳的 build-breaker 插件对此有所帮助)。

有没有办法配置 maven-sonar-plugin 来做到这一点?

  • 开发人员构建中的本地分析。
  • CI构建中的服务器分析

maven sonarqube

6
推荐指数
1
解决办法
2913
查看次数

即使没有gc root,WebappClassLoader内存也会泄漏

这是HEAD DUMP(2013年10月29日更新)

我正在使用webapp工作:

  • Tomcat 7.0.24
  • Java 6
  • 春天3(与aop - cglib)
  • Log4j上的SLF4J
  • Oracle Coherence

经过大量的工作,我设法删除了对类加载器的所有强引用,现在它是垃圾收集器的候选者.那么,内存泄漏解决了吗?当然不是!因为在几次热部署之后,由于PermGen空间而出现了OOME.

感谢Yourkit,我能够检查是否WebappClassLoaderPending Finalization,这意味着它正在终结队列中等待(实际上,不是WebappClassLoader自己而是他的指示对象之一).检查内存快照我发现了几个Finalizer对Oracle Coherence类的引用...... 在此输入图像描述

这似乎是"okey":Coherence对象正在等待垃圾收集,这要归功于删除所有强引用(删除所有一致性线程,删除java安全提供程序等)所做的所有艰苦工作.我想这里没什么可做的.

所以,我正在考虑一些finalize破坏某些东西然后不允许清空终结器队列的执行.但奇怪的是,使用JMX或jmap -finalizerinfo终结器队列似乎是空的!这一切都很混乱所以我一直在其他地方搜索......

你认为这是可以做的吗?我读过一些关于CGLIB增强finalize方法的内容.如果我有权访问,Enhancer我可以创建一个回调过滤器,如下所述,但我不知道如何使用Spring AOP来管理它.

好吧,在其他地方搜索,我发现了几个弱引用java.lang.reflect.Proxy.这些是jdk动态代理吗?或者它们与Introspection内存泄漏有关?弱参考?

在此输入图像描述

信息:我正在使用Spring的上下文监听器来刷新instrospector的缓存(java.beans.Introspector.flushCaches()).我还能做些什么呢?

让我们继续.

然后,我们还有其他几个弱引用java.io.ObjectStreamClass$Caches.我的很多业务对象都有这些弱引用.

在此输入图像描述 在此输入图像描述

也许我需要刷新这些缓存.但是怎么样?

然后我们有这些与之相关的弱参考com.sun.internal.ResourceManager,java.util.logging.Loggingjava.lang.reflect.Proxy

在此输入图像描述

我可以用这个弱引用做什么?我是否需要担心这个问题,或者问题出现在终结器队列中?任何线索都会有所帮助......真的:-D

Ah, another thing, I found a weak reference from a tomcat "main" thread that will …

java tomcat memory-leaks yourkit classloader

6
推荐指数
1
解决办法
4204
查看次数

相对路径不与docker-compose.yml中的命名卷一起使用

我需要使命名卷使用docker-compose执行命令的文件夹的相对路径.

这是docker-compose.yml中的卷定义

volumes:
  esdata1:
   driver: local 
   driver_opts:
      type: none
      device: ./esdata1
      o: bind
Run Code Online (Sandbox Code Playgroud)

似乎docker-compose不创建文件夹,如果它不存在,但即使在lauching docker之前创建文件夹我也总是收到此错误:

ERROR: for esdata  Cannot create container for service esdata: error while mounting volume with options: type='none' device='./esdata1' o='bind': no such file or directory
Run Code Online (Sandbox Code Playgroud)

注意:这可能很愚蠢,但是esdata使用指定卷的服务

  esdata:
    ...
    volumes:
      - esdata1:/usr/share/elasticsearch/data
    ...
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?

也许相对路径./没有指向执行的文件夹docker-compose(我试过~/使用相对于用户家的文件夹,但我得到了同样的错误).

提前致谢,

PS:如果我使用绝对路径,它就像一个魅力

docker docker-compose

6
推荐指数
1
解决办法
1965
查看次数

Jax-WS - 从请求XML中删除空标记

我正在尝试使用提供商公开的Web服务.提供者在他的结尾有一个严格的检查,请求xml不应该包含没有值的标签.

我正在使用Jax-WS.如果我没有在特定对象中设置值,则它将作为空标记发送,并且标记存在.PFB这个例子说明了我的问题.

客户端XML:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:host="http://host.testing.webservice.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <host:testingMathod>
         <arg0>
            <PInfo>
               <IAge>45</IAge>
               <strName>Danny</strName>
            </PInfo>
            <strCorrId>NAGSEK</strCorrId>
            <strIpAddress></strIpAddress>
         </arg0>
      </host:testingMathod>
   </soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)

在这里,没有给出IpAddress的值,因此发送了空标签.

因此,请告诉我们在删除请求xml中的空标记时需要做些什么.Handlerchain是同一个唯一的解决方案吗?

谢谢,Naveen.

xml web-services jax-ws jaxb moxy

4
推荐指数
1
解决办法
1万
查看次数