将请求标记为重复之前的请求。我浏览了论坛,在任何地方都找不到解决问题的方法。
我正在使用Spring 3.2编写代码,所有内容都完全基于注释。该代码接收从不同XSD文件派生的XML文件。
可以这么说,有五个不同的XSD(A1,A2,A3,A4,A5),我的代码可以接收任何类型的XML,并且我有逻辑可以在到达时识别XML的类型。
现在,我尝试使用Spring OXM解组这些文件。但是由于涉及多个XSD,因此我们实际上不能使用一个Un-marshaller。因此,我们需要大约五个。
在Configuration课堂上,我添加了五个如下所示的bean:
Configuration
@Bean(name="A1Unmarshaller") public Jaxb2Marshaller A1Unmarshaller(){ Jaxb2Marshaller unMarshaller = new Jaxb2Marshaller(); unMarshaller.setContextPath("package name for the classes generate by XSD A1"); } @Bean(name="A2Unmarshaller") public Jaxb2Marshaller A1Unmarshaller(){ Jaxb2Marshaller unMarshaller = new Jaxb2Marshaller(); unMarshaller.setContextPath("package name for the classes generate by XSD A2"); } @Bean(name="A3Unmarshaller") public Jaxb2Marshaller A3Unmarshaller(){ Jaxb2Marshaller unMarshaller = new Jaxb2Marshaller(); unMarshaller.setContextPath("package name for the classes generate by XSD A3"); } @Bean(name="A4Unmarshaller") public Jaxb2Marshaller A4Unmarshaller(){ Jaxb2Marshaller unMarshaller = new Jaxb2Marshaller(); unMarshaller.setContextPath("package name for the classes generate by XSD A4"); } @Bean(name="A5Unmarshaller") public Jaxb2Marshaller A5Unmarshaller(){ Jaxb2Marshaller unMarshaller = new Jaxb2Marshaller(); unMarshaller.setContextPath("package name for the classes generate by XSD A5"); }
现在我有五个不同的类C1,C2,C3,C4和C5,我正尝试将一个解组器bean注入一个类。这意味着A1Unmarshaller会自动连线到C1等等。
A1Unmarshaller
C1
构建Spring上下文时,它抛出一个错误,说它期望一个类型的bean Jaxb2Marshaller并得到五个。
Jaxb2Marshaller
注意 使用XML配置完成后效果很好,因此我不确定是否丢失了某些内容。请帮忙。
编辑 C1类之一的代码如下:
@Component public class C1{ @Autowired private Jaxb2Marshaller A1Unmarshaller; A1 o = null public boolean handles(String event, int eventId) { if (null != event&& eventId == 5) { A1 = A1Unmarshaller.unMarshal(event); return true; } return false; }
}
您应该对自动装配变量进行限定,以表明应该注入哪个变量
@Autowired @Qualifier("A1Unmarshaller") private Jaxb2Marshaller A1Unmarshaller;
默认的自动装配是按类型而不是按名称进行的,因此,当有多个相同类型的bean时,必须使用@Qualifier批注。