Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关闭podam中的java.langObject初始化_Java_Jaxb_Jemos Podam - Fatal编程技术网

关闭podam中的java.langObject初始化

关闭podam中的java.langObject初始化,java,jaxb,jemos-podam,Java,Jaxb,Jemos Podam,我有一个POJO: class PersonJob { private PersonAddress address; //a buch of fields (non Object type) } class PersonAddress extends AbstractContact { //empty fields class } class AbstractContact { private Object contactId; public Object getCon

我有一个POJO:

class PersonJob {

private PersonAddress address;

//a buch of fields (non Object type)
}

class PersonAddress extends AbstractContact {
//empty fields class
}

class AbstractContact {
    private Object contactId;

    public Object getContactId() { return this.contactId }

    public void setContactId(Object contactId) {this.contactId = contactId}
}
AbstractContact类放置在外部库中

我将PodamFactory与我的数据提供者一起使用,它扩展了AsbractRandomDataProviderStrategy来填充PersonJob。但是,当JAXB序列化它时,会出现这样的错误:

java.lang.ClassCastException: java.lang.Object incompatible with org.w3c.dom.Element
                at com.sun.xml.bind.v2.runtime.AnyTypeBeanInfo.serializeURIs(AnyTypeBeanInfo.java:153)
                at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:677)
                at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:158)
                at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:360)
                at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:696)
                at com.sun.xml.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:69)
                at com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:172)
                at com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:159)
                at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:360)
                at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsSoleContent(XMLSerializer.java:593)
                at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:341)
                at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:494)
                at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:323)
                at com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:251)
                at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:128)
                at ru.sbrf.bh.banking.product.pcard.branchpcard.orchestration.ValidatePersonProcess.marshallObject(ValidatePersonProcess.java:76)
                at ru.sbrf.bh.banking.product.pcard.branchpcard.orchestration.ValidatePersonProcess.validatePerson(ValidatePersonProcess.java:60)
                at ru.sbrf.bh.banking.product.pcard.branchpcard.service.flow.card.PersonValidationTest.testFilledValidation(PersonValidationTest.java:74)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56)
                at java.lang.reflect.Method.invoke(Method.java:620)
                at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
                at org.testng.internal.Invoker.invokeMethod(Invoker.java:643)
                at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)
                at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)
                at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
                at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
                at org.testng.TestRunner.privateRun(TestRunner.java:782)
                at org.testng.TestRunner.run(TestRunner.java:632)
                at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
                at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
                at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
                at org.testng.SuiteRunner.run(SuiteRunner.java:268)
                at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
                at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
                at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)
                at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
                at org.testng.TestNG.run(TestNG.java:1064)
                at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
                at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:122)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56)
                at java.lang.reflect.Method.invoke(Method.java:620)
                at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

有没有办法通过DataProvider关闭AbstractContact类contactId字段的实例化,DataProvider扩展了AsbractRandomDataProviderStrategy?

首先,您能否将
contactId
更改为实际类型?我打赌在运行时它不是一个
对象
,但正如它声明的那样,它混淆了Podam

如果前者不是一个选项,那么您可以做三件事:

  • 使用
    @PodamExclude
    注释排除
    联系人ID
    字段
  • 使用类别信息策略排除
    contactId
    字段

    DefaultClassInfoStrategy classInfoStrategy=DefaultClassInfoStrategy.getInstance(); classInfoStrategy.addExcludedField(PersonalAddress.class,“contactId”); setClassStrategy(classInfoStrategy)

  • 只需调用
    pojo.setContactId(null)制造后或更好的
    pojo.setContactId(您的ActualAddressObject)


  • 在我的例子中,第二个变体是最方便的解决方案,因为我无法从外部库修改POJO。谢谢你的回答!