从NetBeans中的WSDL使用.Net Web服务时出错

时间:2012-02-08 07:21:34

标签: java .net web-services netbeans jaxb

我在.Net中定义了一个Web服务,我想用java来使用它。 当我想在NetBeans中从WSDL创建Web服务客户端时,我收到以下错误。

JAXWS无法创建Web服务客户端:wsimport实用程序。

[错误]属性“任何”已定义。使用< jaxb:property>解决这个冲突。

以下是我的WSDL文件的一部分:

    <s:element name="Select_Normal_Response">
    <s:complexType>
        <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="Select_Normal_Result">
                <s:complexType>
                    <s:sequence>
                        <s:any minOccurs="0" maxOccurs="unbounded" namespace="..."/>
                        <s:any minOccurs="1" namespace="" processContents="lax" />
                    </s:sequence>
                </s:complexType>
            </s:element>
        </s:sequence>
    </s:complexType>
</s:element>
<s:element name="Select_Normal_With_LastIDResponse">
    <s:complexType>
        <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="Select_Normal_With_LastIDResult">
                <s:complexType>
                    <s:sequence>
                        <s:any minOccurs="0" maxOccurs="unbounded" namespace="..."/>
                        <s:any minOccurs="1" namespace="..." processContents="lax" />
                    </s:sequence>
              </s:complexType>
            </s:element>
        </s:sequence>
    </s:complexType>
</s:element>

我认为因为我有两个s:任何标签,我都会收到此错误。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

第二个“s:any”标记具有Microsoft特定命名空间“urn:schemas-microsoft-com:xml-diffgram-v1”,这是非标准的。您可以从wsdl中删除标记,然后重试生成Web服务客户端。

答案 1 :(得分:1)

您需要使用绑定文件为第二个文件提供唯一的名称。 创建例如bindings.xjb文件:

    <jaxws:bindings
            xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
            jxb:version="2.0"
            xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
            xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
            xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
            jxb:extensionBindingPrefixes="xjc"
    >
        <jaxws:bindings>
            <jxb:bindings node="/s:element/.../s:any[@namespace='...']">
                <jxb:property name="any2" />
            </jxb:bindings>
        </jaxws:bindings>
    </jaxws:bindings>

然后,您可以使用

构建类
    wsimport "http://www.yourwsdl.com/path?wsdl" -b bindings.xjb

如果你使用maven,你可以使用jaxws-maven-plugin。使用它将在构建项目时自动构建客户端类。

e.g。

    <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxws-maven-plugin</artifactId>
            <version>1.9</version>
            <executions>
                    <execution> 
                            <id>webservice</id>
                            <goals> 
                                    <goal>wsimport</goal>
                            </goals>
                            <configuration>
                                    <packageName>com.company.app.wsclient</packageName>
                                    <wsdlUrls>
                                            <wsdlUrl>http://www.yourwsdl.com/path?wsdl</wsdlUrl>
                                    </wsdlUrls>
                                    <bindingFiles>
                                            <string>${basedir}/src/main/resources/bindings.xjb</string>
                                    </bindingFiles>
                            </configuration>
                    </execution>
            </executions>
            <dependencies>
                    <dependency>
                            <groupId>com.sun.xml.ws</groupId>
                            <artifactId>jaxws-tools</artifactId>
                            <version>2.2.5</version>
                    </dependency>
            </dependencies>
    </plugin>
相关问题