标签: wsdl2java

使用xmlbeans绑定cxf wsdl2java

我开始使用apache CXF 2.1.5xmlbeans来生成Web服务客户端.FAQ页面显示了如何使用jaxb绑定来java.util.Date绑定xsd:dateTime:

<jaxws:bindings wsdlLocation="YOUR_WSDL_LOCATION" 
          xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" 
          xmlns:xs="http://www.w3.org/2001/XMLSchema" 
          xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
          xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> 
  <jaxws:bindings  node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='THE_NAMESPACE_OF_YOUR_SCHEMA']"> 
      <jxb:globalBindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
        <jxb:javaType name="java.util.Date" xmlType="xs:dateTime" 
                      parseMethod="org.apache.cxf.tools.common.DataTypeAdapter.parseDateTime" 
                      printMethod="org.apache.cxf.tools.common.DataTypeAdapter.printDateTime"/> 
      </jxb:globalBindings> 
  </jaxws:bindings> 
</jaxws:bindings> 
Run Code Online (Sandbox Code Playgroud)

我想使用xmlBeans绑定,但找不到合适的示例.我理解如何使用xmlbeans将xml文件映射到java对象,但我找不到要使用的语法cxf.任何指针,代码样本都是受欢迎的.

java cxf wsdl2java xmlbeans

5
推荐指数
1
解决办法
5567
查看次数

WSDLException:尝试解析引用的模式时发生错误

我正在尝试使用eclipse Galileo和Windows xp上的轴2 1.4从本地WSDL文件生成代理类.我的问题是由于WSDL中导入的模式而导致错误.困扰我的那条线是:

<xsd:import namespace="http://www.w3.org/2005/05/xmlmime" schemaLocation="http://www.w3.org/2005/05/xmlmime"/>
Run Code Online (Sandbox Code Playgroud)

我试过运行wsdl2java以下命令:

wsdl2java.bat  -uri SOAService.wsdl -o D:\temp p test -d xmlbeans -a -s -ns2p -uw
Run Code Online (Sandbox Code Playgroud)

我得到以下异常:

Exception in thread "main" org.apache.axis2.wsdl.codegen.CodeGenerationException
: Error parsing WSDL
        at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.<init>(CodeGenerat
ionEngine.java:156)
        at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:35)
        at org.apache.axis2.wsdl.WSDL2Java.main(WSDL2Java.java:24)
Caused by: javax.wsdl.WSDLException: WSDLException (at /wsdl:definitions/wsdl:ty
pes/xsd:schema): faultCode=OTHER_ERROR: An error occurred trying to resolve sche
ma referenced at 'http://www.w3.org/2005/05/xmlmime', relative to 'file:/D:/Prog
rammi/axis2-1.4/bin/SOAService.wsdl'.: java.net.ConnectException: Connection tim
ed out: connect
        at com.ibm.wsdl.xml.WSDLReaderImpl.parseSchema(Unknown Source)
        at com.ibm.wsdl.xml.WSDLReaderImpl.parseSchema(Unknown Source)
        at com.ibm.wsdl.xml.WSDLReaderImpl.parseTypes(Unknown Source)
        at com.ibm.wsdl.xml.WSDLReaderImpl.parseDefinitions(Unknown Source)
        at …
Run Code Online (Sandbox Code Playgroud)

eclipse axis wsdl axis2 wsdl2java

5
推荐指数
1
解决办法
1万
查看次数

CXF Wsdl2Java最佳实践

我目前正在使用cxf 2.4.0,我的代码是webservice的调用者.我能够使用Maven中的cxf插件生成客户端java文件.我的问题是生成的文件的最佳实践是什么?我应该编译生成的文件并将生成的类文件打包到一个jar文件中,还是应该在构建路径中包含所有生成的java文件?

cxf wsdl2java

5
推荐指数
1
解决办法
3952
查看次数

WSDL生成可重复的构建

我被要求查看现有基于服务的应用程序的构建过程.它有几个基于服务的模块,其中一些服务由第三方提供.构建过程中使用的wsdls通过http降低到构建中.为了竞争,我使用maven 3和axistools-maven-plugin从wsdl生成类.

这开始让我思考.如果远程服务器关闭,我的构建将失败.如果wsdl更改我的构建也可能失败.我想要这个吗?远程wsdls在service/wsdl名称中进行了版本化,因此不应对API进行重大更改,但它们是第三方,我真的不能依赖此约定.

在本地下载wsdl并根据源代码管理的文件构建是不是更好?我会有一个适当的可重复构建,然后没有远程服务器不可用的危险.但这似乎并不敏捷.如果我采用这种方法,那么我如何才能知道远程wsdl中的任何变化?

我敢肯定,我不是第一个想从wsdls构建最佳实践的人.任何人都可以强调哪种机制被认为是从远程wsdls生成的服务生成可修复构建的最佳实践方式?

java axis wsdl wsdl2java maven

5
推荐指数
1
解决办法
475
查看次数

IllegalArgumentException:键不能为空-哪个键?

尝试从示例WSDL(使用CXF 2.7.1)构建演示合同优先服务:

<?xml version='1.0' encoding='UTF-8'?>
<wsdl:definitions name="OrderProcessService" targetNamespace="http://order.demo/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://order.demo/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <wsdl:types>
        <xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://order.demo/" xmlns:tns="http://order.demo/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
            <xs:element name="processOrder" type="tns:processOrder" />
            <xs:element name="processOrderResponse" type="tns:processOrderResponse" />
            <xs:complexType name="processOrder">
                <xs:sequence>
                    <xs:element minOccurs="0" name="arg0" type="tns:order" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="order">
                <xs:sequence>
                    <xs:element minOccurs="0" name="customerID" type="xs:string" />
                    <xs:element minOccurs="0" name="itemID" type="xs:string" />
                    <xs:element name="price" type="xs:double" />
                    <xs:element name="qty" type="xs:int" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="processOrderResponse">
                <xs:sequence>
                    <xs:element minOccurs="0" name="return" type="xs:string" />
                </xs:sequence>
            </xs:complexType>
        </xs:schema>
    </wsdl:types>
    <wsdl:message name="processOrderResponse">
        <wsdl:part element="tns:processOrderResponse" name="parameters">
        </wsdl:part> …
Run Code Online (Sandbox Code Playgroud)

ant wsdl cxf jetty wsdl2java

5
推荐指数
1
解决办法
4878
查看次数

为JAXB.unmarshal()提取XML节点的最简单方法是什么?

我的wsdl2java目标是cxf-codegen-plugin从WSDL生成Java。然后,在测试中,我使用JAXB.unmarshal()从原始Web服务XML结果中填充类。

一个典型的示例是GetAllResponseType response = unmarshal("get-all.xml", GetAllResponseType.class)使用以下方法:

<T> T unmarshal(String filename, Class<T> clazz) throws Exception {
    InputStream body = getClass().getResourceAsStream(filename);
    return javax.xml.bind.JAXB.unmarshal(body, clazz);
}
Run Code Online (Sandbox Code Playgroud)

问题是这样的:原始XML响应始终包含封闭的Envelope和Body标记,而这些标记不是由wsdl2java作为类生成的:

<n4:Envelope xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:n="http://www.informatica.com/wsdl/"
         xmlns:n4="http://schemas.xmlsoap.org/soap/envelope/" xmlns:n5="http://schemas.xmlsoap.org/wsdl/"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <n4:Body>
    <n:getAllResponse xmlns:n="http://www.informatica.com/wsdl/">
        <n:getAllResponseElement>
           ...
        </n:getAllResponseElement>
    </n:getAllResponse>
  </n4:Body>
</n4:Envelope>
Run Code Online (Sandbox Code Playgroud)

因此,为了使用JAXB.unmarshal(),我必须

  1. 在get-all.xml中手动剥离周围的Envelope / Body标签
  2. 或提取getAllResponse节点并将其重新转换为InputStream
  3. 或创建信封和身体类

目前我做2,但是有很多代码:

<T> T unmarshal(String filename, Class<T> clazz) throws Exception {
    InputStream is = getClass().getResourceAsStream(filename);
    InputStream body = nodeContent(is, "n4:Body");
    return javax.xml.bind.JAXB.unmarshal(body, clazz);
}

InputStream nodeContent(InputStream is, String …
Run Code Online (Sandbox Code Playgroud)

java cxf wsdl2java jaxb unmarshalling

5
推荐指数
1
解决办法
5827
查看次数

我如何首先为apache cxf wsdl创建一个maven项目

我想使用wsdl从头开始创建一个apache cxf maven项目.我需要使用wsdl2java.我首先找不到wsdl的原型.当我尝试

mvn archetype:generate -Dfilter = org.apache.cxf.archetype:

我只看到这些.首先没有wsdl的原型吗?如果没有,有人可以推荐最有效的方法吗?谢谢

选择原型:1:remote - > org.apache.cxf.archetype:cxf-jaxrs-service(使用Spring配置的简单CXF JAX-RS webap p服务)2:remote - > org.apache.cxf.archetype:cxf-jaxws -javafirst(从Java代码开始创建用于开发Web服务的项目)

wsdl cxf wsdl2java maven

5
推荐指数
1
解决办法
2508
查看次数

将soap头身份验证添加到wsdl2java生成的代码中

我正在从wsdl创建Java Web服务客户端.我使用Eclipses的Dynamic Web Project和新的Web Services Client来生成带有Apache Axis 1.4的wsdl2java的代码.我需要为此代码添加SOAP身份验证,以便它与服务一起使用.我在生成的代码中找不到这样做的地方.经过大量的研究,我发现了这个,到目前为止,我已经将其用作我的代码的主干.

将ws-security添加到wsdl2java生成的类中

在我收到"处理邮件安全性时发生错误"之前或其他方面.现在我来了

"例外:不明白"MustUnderstand"标题:{ http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd }安全信息:空值"

我已经尝试了很多东西来克服这个异常.这是我现在到达的代码.

javax.xml.namespace.QName headerName = new javax.xml.namespace.QName(
                "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "Security");
        org.apache.axis.message.SOAPHeaderElement header = new org.apache.axis.message.SOAPHeaderElement(headerName);
        header.setActor(null);
        header.setMustUnderstand(true);

        // Add the UsernameToken element to the WS-Security header
        javax.xml.soap.SOAPElement utElem = header.addChildElement("UsernameToken");
        utElem.setAttribute("Id", "uuid-3453f017-d595-4a5b-bc16-da53e5831cd1-1");
        javax.xml.soap.SOAPElement userNameElem = utElem.addChildElement("Username");
        userNameElem.setValue("username");
        javax.xml.soap.SOAPElement passwordElem = utElem.addChildElement("Password");
        passwordElem.setAttribute("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
        passwordElem.setValue("password");

        header.setProcessed(true);

        // Finally, attach the header to the binding.
        setHeader(header)
Run Code Online (Sandbox Code Playgroud)

此代码位于我的Binding_ServiceStub类中(在其"createCall方法"中).

我们使用这个wsdl在C#和VB中创建了客户端,并且只需更改ClientCredentials变量就可以轻松实现,该变量是生成的代理类的扩展.我希望这里有类似的东西.

这是wsdl代码中的安全策略.

<wsp:Policy><sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"><wsp:Policy><sp:WssUsernameToken10/></wsp:Policy></sp:UsernameToken></wsp:Policy>
Run Code Online (Sandbox Code Playgroud)

有谁知道我还能在这做什么?为什么会发生这种异常?我已经尝试了很多不同的前缀和setProcesses以及setMustUnderstand值的组合都是徒劳的(并且基于我对此异常的研究).

如果有人知道在wsdl2java代码中添加Soap头认证的方法,我也会采取这种方式.只是需要这个工作,你会认为这样的事情会更直接或至少有更多的例子.

更新 - 确认使用SOAPUI传递的相同头文件正常工作.必须是框架的东西?我创建了一个自定义处理程序来处理SOAP消息,但这没有帮助.Axis 1.4和JAX-RPC是问题吗?(我知道他们已经过时但仍然......)

java soap wsdl2java soapheader usernametoken

5
推荐指数
1
解决办法
5343
查看次数

如何从WSDL生成* .xjb文件?

我有一个WSDL文件weatherservice.wsdl,我正在尝试使用生成与此WSDL的绑定xjc。如何使用xjc执行此操作?

我从xjc中找不到任何命令行参数来执行此操作。 xjc -p com -wsdl weatherservice.wsdl

wsdl wsdl2java jaxb xjc xjb

5
推荐指数
1
解决办法
9716
查看次数

Jaxb:为固定值属性生成常量值

我正在使用xsd,它使用以下结构:

<xs:attribute name="listVersionID" type="xs:normalizedString" use="required" fixed="1.0">
Run Code Online (Sandbox Code Playgroud)

虽然本身没有问题,但使用起来相当烦人,因为这个定义的固定值在xsd规范的发布之间增加,我们需要修改单独的常量类中的值以保持它们有效,尽管很少如果xsd感兴趣的内容发生了变化.xsd在其他地方维护,所以只是改变它是没有选择的.

因此我问自己是否有一个jaxb-plugin或类似的将固定值属性转换为常量ala

@XmlAttribute(name = "listVersionID")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
@XmlSchemaType(name = "normalizedString")
protected final String listVersionID = "1.0";
Run Code Online (Sandbox Code Playgroud)

而不仅仅是

@XmlAttribute(name = "listVersionID")
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
@XmlSchemaType(name = "normalizedString")
protected String listVersionID;
Run Code Online (Sandbox Code Playgroud)

必须手动填充.

有谁知道这样的?

java xsd wsdl2java jaxb

5
推荐指数
1
解决办法
2378
查看次数

标签 统计

wsdl2java ×10

cxf ×5

java ×5

wsdl ×5

jaxb ×3

axis ×2

maven ×2

ant ×1

axis2 ×1

eclipse ×1

jetty ×1

soap ×1

soapheader ×1

unmarshalling ×1

usernametoken ×1

xjb ×1

xjc ×1

xmlbeans ×1

xsd ×1