背景:我们正在开发一个与多个第三方Web服务通信的应用程序。遗憾的是,其中一个使用糟糕的命名约定定义了WSDL文件。响应元素及其使用的complexType经常重复使用相同的名称。下面截取的代码显示了一个这样的实例:
<s:element name="Reset_PasswordResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Reset_PasswordResult" type="tns:ResetPasswordResponse" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="ResetPasswordResponse">
<s:complexContent mixed="false">
<s:extension base="tns:BaseResponse" />
</s:complexContent>
</s:complexType>
我们使用Maven cxf codigen插件(jaxb/jax-ws)来编译Java类。为了避免名称冲突,我们以前使用过选项-AutoName分辨率。然而,我们发现这会导致意想不到的结果,在某些机器上,一个类被重命名为ResetPasswordResponse2.java,而在其他机器上,另一个类被重命名。这使得协作开发非常困难,也让我们对未来感到担忧(如果它在某个时候不能在Jenkins上正确编译怎么办?)
问题:我正在寻找一种手动确定翻译/重命名应如何进行的方法。
jaxb/jax-ws绑定是一种可能的解决方案吗?还有其他选择吗?
检查以下问题和答案:
WSDL外部XSD的JAXB绑定
简而言之,您可以使用所谓的绑定文件来自定义名称。
<jxb:bindings version="2.1" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:bindings schemaLocation="xsdschema.xsd" node="/xs:schema">
<jxb:bindings node="xs:complexType[@name='ResetPasswordResponse']">
<jxb:class name="ResetPasswordResponseType"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
您可能对jaxb:nameXmlTransform
感兴趣:
JAXB: nameXmlTransform typeName前缀不起作用的问题
这将允许您全局自定义类型或元素命名规则:
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" jaxb:version="2.0">
<jaxb:bindings schemaLocation="schema.xsd" node="/xsd:schema">
<jaxb:schemaBindings>
<jaxb:nameXmlTransform>
<jaxb:typeName suffix="Type"/>
<jaxb:elementName suffix="Element"/>
</jaxb:nameXmlTransform>
</jaxb:schemaBindings>
</jaxb:bindings>
</jaxb:bindings>
信用归布莱斯·道根所有。
假设您有2个包,并且有名为-Test的公共类。 第一个包。测试 第二包测试 它们中的每一个都有实例变量-x。 在第一种情况下-int x=2; 在第二种情况下-int x=3; 我想导入FirstPackage。在第二个包内测试。测试并打印值为2的x。 我的代码: 但是输出是3。如何打印?
问题内容: 想知道是否有人在使用新功能通过PHP 5.3对类进行命名空间时是否遇到了此问题。 我正在使用单独的类来生成动态类调用,以在应用程序中定义用户类型。基本上,类定义器采用类型的整数表示形式并解释它们,返回一个包含要用作该用户模型的类名的字符串。 我在全局范围内定义了具有该名称的用户类型的对象模型,但是在Editor名称空间中,该用户的编辑器具有另一个名称相同的对象。由于某些原因,PHP不允
输出:类名:包。名称在这里B 有人能告诉我为什么匿名类类型在getClass()方法中给出封闭类吗?这导致了问题的出现。对象C上的equals()始终失败。我的理解是,由于getClass提供了封闭类名,所以永远不会调用重写的equals?
我已经创建了一个类似上面的类,我希望能够使用相同的类使用'colour'作为这个类的替代,如下面。 有没有一种方法可以简单地创造出来?
反射类和方法以及类加载器等都需要使用所谓的“二进制”类名。 类的完全限定名为。然而,要获得类对象,需要编写: 而不是 因为恰好是的内部类。
我想做的是,根据文件名(在代码中以字符串的形式)将编译后的类[lets call it ClassA.class]复制到一个新文件(也定义为ClassA中的字符串)[lets call it ClassB.class],并能够使用“javac ClassB”执行新复制的类(使用新文件名)。 做这件事最好、最简洁的方法是什么? 编辑:工作的解决方案...... 十六进制-编辑文件从ClassA到Cl