【问题标题】:migrateing from axis to cxf从轴迁移到 cxf
【发布时间】:2014-12-03 14:38:15
【问题描述】:

我正在尝试从轴迁移到 cxf,并且我有插件生成到 java 代码的 wsdl 文件。我有两个问题:

  1. 我在 wsdl 文件中有以下块:

    <xsd:element name="sendSms" type="parlayx_sms_send_local_xsd:sendSms"/>
      <xsd:complexType name="sendSms">
        <xsd:sequence>
          <xsd:element maxOccurs="unbounded" minOccurs="1" name="addresses" type="xsd:anyURI"/>
          <xsd:element maxOccurs="1" minOccurs="0" name="senderName" type="xsd:string"/>
          <xsd:element name="message" type="xsd:string"/>
          <xsd:element maxOccurs="1" minOccurs="0" name="receiptRequest" type="parlayx_common_xsd:SimpleReference"/>
        </xsd:sequence>
      </xsd:complexType>
    

    anyURI 生成为 String 而不是 URI,有人知道为什么吗?

  2. 轴创建服务定位器类和绑定存根类,允许添加到 Web 服务属性,如用户名、密码、超时等。我需要添加这些属性,因为服务是超安全连接并且它们不是参数在 Web 服务生成的方法 sendSms 中。 (您可以查看下面的定义)。

    <wsdl:portType name="SendSms">
      <wsdl:operation name="sendSms">
        <wsdl:input message="parlayx_sms_send:SendSms_sendSmsRequest"/>
        <wsdl:output message="parlayx_sms_send:SendSms_sendSmsResponse"/>
        <wsdl:fault message="parlayx_common_faults:ServiceException" name="ServiceException"/>
        <wsdl:fault message="parlayx_common_faults:PolicyException" name="PolicyException"/>
      </wsdl:operation>
    </wsdl:portType>
    
    <xsd:element name="sendSms" type="parlayx_sms_send_local_xsd:sendSms"/>
      <xsd:complexType name="sendSms">
        <xsd:sequence>
          <xsd:element maxOccurs="unbounded" minOccurs="1" name="addresses" type="xsd:anyURI"/>
          <xsd:element maxOccurs="1" minOccurs="0" name="senderName" type="xsd:string"/>
          <xsd:element name="message" type="xsd:string"/>
          <xsd:element maxOccurs="1" minOccurs="0" name="receiptRequest" type="parlayx_common_xsd:SimpleReference"/>
        </xsd:sequence>
      </xsd:complexType>
    

    我没有找到任何可以确定它演示了我如何添加这些值的示例。 你知道这样的例子吗?

谢谢, 丹妮拉

【问题讨论】:

    标签: cxf


    【解决方案1】:

    关于您的第一个问题,CXF 使用JAXB(默认情况下)进行 XML 和对象之间的转换,并指定 anyURI 映射到 String。您必须自己进行转换,如果您想要在无效 URI 上检查异常,请使用 new URI(str),如果您更喜欢未经检查的异常,请使用 URI.create(str)。虽然您可以注册一个自定义转换器来为您处理,但在我看来这比自己做要复杂得多;每个 URI 参数多一行代码(或者如果您使用检查异常路由,则可能多行,这可能在形式上更好)。

    关于第二个问题,关键是由 CXF(或任何其他符合 JAX-WS 的客户端)生成的客户端存根将实现javax.xml.ws.BindingProvider 接口。这导致代码有点像这样:

    // Use the right things from your tooling here...
    SendSMS serviceInstance = new SMSSender().getSendSMSImplPort();
    
    Map<String, Object> requestContext =
            ((BindingProvider) serviceInstance).getRequestContext();
    requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, serviceAddress);
    requestContext.put(BindingProvider.USERNAME_PROPERTY, username);
    requestContext.put(BindingProvider.PASSWORD_PROPERTY, password);
    // And so on for all the properties you want to configure
    

    超时有点不同,因为在 CXF 中它们是 configured at the conduit level。该线程的相关部分似乎是这个 sn-p (属于 cxf.xml 文件中):

    <http:conduit name="http://131.107.153.205/.*"> 
        <http:client ConnectionTimeout="0" ReceiveTimeout="0"/> 
    </http:conduit> 
    

    我不知道您将如何更改它以适应您的要求(尤其是管道名称);老实说,到目前为止,这是我一直坚持使用默认设置的领域。 (您可能可以set it at the code level - 查看 cmets - 但对我来说并不是特别清楚。)还要注意上面的两个超时是由该代码设置的,根本没有超时;这可能不是您在生产代码中想要的……

    【讨论】:

    • 谢谢。关于第二个答案,我不太确定如何找到绑定接口。我有一个定义方法的接口 SendSms 和一个 SendSmsService ,我可以从中执行 getSendSms 并接收接口。
    【解决方案2】:

    是的,CXF 使用 JAXB(默认情况下)在 XML 和对象之间进行转换,并指定将 anyURI 映射到字符串。但是,可以更改 Java 类型和 SOAP 类型之间的绑定。这是 JAXB 的绑定文件,它将 xs:anyURI 映射到 java.net.URI

    <?xml version="1.0" encoding="UTF-8"?>
    <jaxb:bindings version="2.0"
                  xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
                  xmlns:xs="http://www.w3.org/2001/XMLSchema">
    
            <jaxb:globalBindings
                xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
                xmlns:xs="http://www.w3.org/2001/XMLSchema">
                <jaxb:javaType name="java.net.URI" xmlType="xs:anyURI"
                    parseMethod="create" printMethod="toASCIIString" />
            </jaxb:globalBindings>
    </jaxb:bindings>
    

    要使用它,请将选项 -b 指定为 wsdl2java,它指定 JAXWS 或 JAXB 绑定文件

    wsdl2java -b type-bindings.xml ...
    

    【讨论】:

      猜你喜欢
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 2023-04-05
      相关资源
      最近更新 更多