Java 为包含xmldsig的xsd启动cxf客户端时出错
我们目前正在开发一个包含第三方XSD的WebService。此第三方XSD包含数字签名(导入XSD) 该体系结构有两个主要功能:Java 为包含xmldsig的xsd启动cxf客户端时出错,java,cxf,xml-signature,Java,Cxf,Xml Signature,我们目前正在开发一个包含第三方XSD的WebService。此第三方XSD包含数字签名(导入XSD) 该体系结构有两个主要功能: 我们的Web服务根据第三方XSD合同接受消息 我们将其中一些消息转发给另一方(也是第三方) 通过小型客户机提供Web服务 1) 工作完美,这里没有涉及签名的问题 2) 这很奇怪。只要签名元素 <xs:element ref="sig:Signature" minOccurs="0" maxOccurs="1"/> 只要这里引用了xmldsig Objec
<xs:element ref="sig:Signature" minOccurs="0" maxOccurs="1"/>
只要这里引用了xmldsig ObjectFactory,系统就会崩溃。一旦结束,一切正常(好吧,直到有人发送了签名,然后无法识别)
深入挖掘(即调试)使我了解到以下信息:
在这段代码中抛出异常(java.text.MessageFormat
,来自jdk 1.8.131第1415行)
签名生成这段代码,在我看来很好:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "SignatureType", propOrder = {
"signedInfo",
"signatureValue",
"keyInfo",
"objects"
})
@XmlRootElement(name = "Signature")
public class Signature implements Serializable
{
private final static Long serialVersionUID = 5363422069410258353L;
@XmlElement(name = "SignedInfo", required = true)
@NotNull
protected SignedInfo signedInfo;
@XmlElement(name = "SignatureValue", required = true)
@NotNull
protected SignatureValue signatureValue;
@XmlElement(name = "KeyInfo")
protected KeyInfo keyInfo;
@XmlElement(name = "Object")
protected List<org.w3._2000._09.xmldsig_.Object> objects;
@XmlAttribute(name = "Id")
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
@XmlID
@XmlSchemaType(name = "ID")
@Pattern(regexp = "[\\i-[:]][\\c-[:]]*")
protected String id;
// getters/setters omitted
@xmlacessortype(xmlacesstype.FIELD)
@XmlType(name=“SignatureType”,proporter={
“签名信息”,
“签名价值”,
“keyInfo”,
“对象”
})
@XmlRootElement(name=“签名”)
公共类签名实现可序列化
{
私有最终静态长serialVersionUID=5363422069410258353L;
@xmlement(name=“SignedInfo”,必需=true)
@NotNull
受保护的SignedInfo SignedInfo;
@XmlElement(name=“SignatureValue”,必需=true)
@NotNull
受保护的SignatureValue SignatureValue;
@xmlement(name=“KeyInfo”)
受保护的KeyInfo-KeyInfo;
@xmlement(name=“Object”)
受保护的物品清单;
@xmltattribute(name=“Id”)
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
@XmlID
@XmlSchemaType(name=“ID”)
@模式(regexp=“[\\i-[:]][\\c-[:]]*”)
受保护的字符串id;
//省略了getter/setter
我只是不明白这是怎么发生的,为什么会发生。或者我在这里遇到了一个bug吗?主要的问题是 com.sun.xml.internal.bind.v2.runtime.illegalannotations异常:1 两个类具有相同XML的IllegalAnnotationExceptions计数 类型名称“xxx”。使用@XmlType.name和@XmlType.namespace 这个问题解决了 至于为什么这个错误在框架的深处被破坏,而不是清楚地给出,我没有任何线索。我以前见过这个错误,一旦知道了它,就很清楚该怎么做。也许在那里的某个地方有一个bug,谁知道呢
private void makeFormat(int position, int offsetNumber,
StringBuilder[] textSegments)
{
String[] segments = new String[textSegments.length];
for (int i = 0; i < textSegments.length; i++) {
StringBuilder oneseg = textSegments[i];
segments[i] = (oneseg != null) ? oneseg.toString() : "";
}
// get the argument number
int argumentNumber;
try {
argumentNumber = Integer.parseInt(segments[SEG_INDEX]); // always unlocalized!
} catch (NumberFormatException e) {
throw new IllegalArgumentException("can't parse argument number: "
+ segments[SEG_INDEX], e);
}
@Bean
public GenericServiceSoap genericServiceSoap() {
final JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setAddress(http://example.com);
factory.setServiceClass(GenericServiceSoap.class);
factory.setInInterceptors(createInInterceptors());
factory.setOutInterceptors(createOutInterceptors());
return (GenericServiceSoap) factory.create();
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "SignatureType", propOrder = {
"signedInfo",
"signatureValue",
"keyInfo",
"objects"
})
@XmlRootElement(name = "Signature")
public class Signature implements Serializable
{
private final static Long serialVersionUID = 5363422069410258353L;
@XmlElement(name = "SignedInfo", required = true)
@NotNull
protected SignedInfo signedInfo;
@XmlElement(name = "SignatureValue", required = true)
@NotNull
protected SignatureValue signatureValue;
@XmlElement(name = "KeyInfo")
protected KeyInfo keyInfo;
@XmlElement(name = "Object")
protected List<org.w3._2000._09.xmldsig_.Object> objects;
@XmlAttribute(name = "Id")
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
@XmlID
@XmlSchemaType(name = "ID")
@Pattern(regexp = "[\\i-[:]][\\c-[:]]*")
protected String id;
// getters/setters omitted