我想将它用于对象工厂:给定一个字符串,创建一个Class,如果这个Class支持一个协议(使用Create()方法),那么分配该类并调用Create.
我正在使用JAXB 2.2.2来解析一个简单的XML-REST流.这是一段代码:
JAXBContext jc = JAXBContext.newInstance( "com.example.entities" );
Unmarshaller u = jc.createUnmarshaller();
r = (Response )u.unmarshal( inputStream );
Run Code Online (Sandbox Code Playgroud)
ObjectFactory类:
@XmlRegistry
public class ObjectFactory {
public Response createRsp() {
return new Response();
}
}
Run Code Online (Sandbox Code Playgroud)
回复类:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="rsp")
@XmlType
public class Response { ... }
Run Code Online (Sandbox Code Playgroud)
"com.example.entities"必须包含ObjectFactory类或jaxb.index.我想使用ObjectFactory类来决定一些pojo初始化,但是从不使用这些类:Response类总是直接由class.newInstance()实例化.这有什么不对吗?
我有多个(假设是2,A和B)webservices,我需要生成一个客户端来使用它们.在Netbeans中,我使用向导"new Web Service Client"传递两个wsdl,查看输出Netbeans只需为每个wsmport调用wsimport.
wsimport http:/mydomain/wsA.svc?wsdl
wsimport http:/mydomain/wsB.svc?wsdl
Run Code Online (Sandbox Code Playgroud)
A和B都生成一个相同的包com.mydomain.myapp(我猜它们是在同一个命名空间中定义的),所以我得到了在同一个包中合并的A和B的存根类集.
但是,wsimport还为每个Web服务创建一个ObjectFactory,因此如果我在AI获取与B定义相关的ObjectFactory之后生成B的存根(因为第一个,A被覆盖).相反,如果我切换订单,A的ObjectFactory仍然存在.
问题是我需要两个ObjectFactories才能为Web服务A和B的类型创建JAXBElements包装clas实例.
有没有办法在Java包中映射A的名称空间,在另一个中映射B以获取
com.mydomain.myapp.a
com.mydomain.myapp.b
Run Code Online (Sandbox Code Playgroud)
所以保留两个ObjectFactories?
简单的重构没有帮助,因为在内部调用了getClass(),一旦一个包被重构,它就不再起作用了.
我需要一个包含来自多个模式的多个 java 对象的 ObjectFactory。我对几个不同的插件和这些插件的变体的运气都是零。目前我正在使用以下内容:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-xjc-plugin</artifactId>
<version>2.6.2</version>
<configuration>
<extensions>
<extension>org.apache.cxf.xjcplugins:cxf-xjc-dv:2.6.2</extension>
</extensions>
</configuration>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>xsdtojava</goal>
</goals>
<configuration>
<sourceRoot>${basedir}/target/generated-sources/xjc</sourceRoot>
<xsdOptions>
<xsdOption>
<xsd>${basedir}/src/main/resources/osds/schemas/IataAsmAdmEvent.xsd</xsd>
<xsd>${basedir}/src/main/resources/osds/schemas/IataAsmCnlEvent.xsd</xsd>
<xsd>${basedir}/src/main/resources/osds/schemas/IataAsmEqtEvent.xsd</xsd>
<packagename>com.mypackage</packagename>
</xsdOption>
</xsdOptions>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
使用此插件和许多其他插件,我只能生成仅包含列表中最后一个架构的 ObjectFactory。以前的 xsd 都没有在 OF 中作为 java 对象。谁能帮我解决这个问题吗?
谢谢!
我有问题wsimport。在我必须wsimport编辑的wsdl之一中,我有一个名为type的complexType "objectFactory"。wsimport在导入用于维护JAXB连接的不同类时,有没有办法告诉命令创建ObjectFactory.java。换句话说,我可以说wsimport而不是创建ObjectFactory.java一些自定义类MyCustomFactory.java吗?
是否可以以这样的方式自定义映射,即可complexType name="objectFactory"映射到名称不同的对象MyObjectFactory.java?
谢谢
我在StructureMap 4.0中遇到问题。在使用StructureMap 3.0时,我使用ObjectFactory来配置所有实例,并且很容易通过解决方案内部任何地方的自己的接口来获取实例。例如:
在global.cs上,我声明如下:ObjectFactory.Initialize(x => {x.For()。Use();}
在另一个类(例如Family.cs)上,很容易获得Peson的实例:var person = ObjectFactory.GetInstance();
但是,将StructureMap更新到4.0后,我遇到了问题。它使用Container而不是ObjectFactory,我找不到任何获取现有容器的方法。我的意思是这段代码是错误的var person = container.GetInstance();
如果我在Global.cs中将Container声明为静态变量,则可以从Family.cs类中访问它。我不喜欢这样 我希望通过获取在global.cs中声明的现有容器来像ObjectFactory一样工作,但是我不知道该怎么做。
我正在使用StructureMap来满足我的IoC需求.
为了使事情愉快地测试,我IContainer尽可能地传递实例,通常作为构造函数参数.为方便起见,我希望能够回归使用ObjectFactory无参数构造函数.
要做到这一点最简单的方法(我认为)是简单地得到IContainer的ObjectFactory类包装,并传递到其他构造.不幸的是,我找不到这个实例被公开曝光的任何地方.
问题是:
有没有办法获得IContainer内部ObjectFactory所以我可以像处理用户提供的实例一样处理它?
或者,有没有办法将配置复制ObjectFactory到新Container实例?
例:
我希望能够做到以下几点:
public class MyClass
{
public MyClass()
{
Container = ... // The ObjectFactory container instance.
}
public MyClass(IContainer container)
{
Container = container;
}
public IContainer Container { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)