带有名称空间的XPath作为SOAP请求中的谓词

时间:2014-12-02 17:29:33

标签: java soap soap-client

我正在使用SOAP客户端,我需要发送包含XPATH作为Predicates的请求。  在这种情况下,谓词包括多个节点,这些元素来自不同的名称空间。

我想生成XPath,因此它知道其元素的名称空间。我目前已经硬编码了元素的名称以及假定的命名空间,因为它是在创建请求时动态生成的。有一件事我可以使用所有名称空间修复package-java.info并在下面配置插件,根本不生成这些包类,并在构建谓词时对名称空间进行硬编码。一些我对这种方法不太满意,并认为应该有更好的方法。

<plugin>
                <groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb2-plugin</artifactId>
                <configuration>
                  <args>
                   <arg>-npa</arg>
                  </args>
                </configuration>
</plugin>

要求发送到Webservice服务器的请求。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<exchange:SCNMessage xmlns:exchange="http://example1.com/abc/exchange" xmlns:scn="http://example1.com/abc/scn"
                         xmlns:ns3="http://example.com/abc/structure/2.0" xmlns:ns4="http://example.com/abc/core/2.0"
                         xmlns:ns5="http://example.com/abc/domains/migration/2.1"
                         xmlns:ns6="http://example.com/abc/domains/screening/2.1">
    <scn:SchemaVersion xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
    <scn:Header xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
    <scn:Query>
        <scn:StartingResults>1</scn:StartingResults>
        <scn:MaximumResults>10</scn:MaximumResults>
        <scn:AsOfDateTime xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
        <scn:PredicateSet>
            <scn:PredicateSetIdentifier>Request Application Data</scn:PredicateSetIdentifier>
            <scn:Predicate>//scn:SCN/scn:ScnMetadata/scn:ReceivedSystem!=HELLO
            </scn:Predicate>
            <scn:Predicate>//scn:SCN/scn:Request/ns5:ActivityStatus/ns5:StatusText="KUAUN"</scn:Predicate>
            <scn:Predicate>//scn:SCN/scn:Request/ns6:Program="XYZ"</scn:Predicate>
            <scn:Predicate>//scn:SCN/scn:Request/scn:Source="ABC"</scn:Predicate>
            <scn:Predicate>//scn:SCN/ns3:Person/ns3:PersonCitizenshipCode="INR"</scn:Predicate>
        </scn:PredicateSet>
        <scn:ResultSet>
            <scn:ResultText>//scn:SCN/scn:Request</scn:ResultText>
        </scn:ResultSet>
    </scn:Query>
</exchange:SCNMessage>

请让我知道,如果有人解决了类似的问题或任何指向优雅解决方案的方向。

0 个答案:

没有答案