继续说说cxf调用.net中命令空间的问题

本文详细介绍了使用CXF调用.NET WebService时遇到的命名空间问题,包括targetNamespace和namespace的区别及用法。targetNamespace主要用于区分整个WSDL,常在接口声明中使用;namespace用于复杂参数的命名,常见于Java Bean的package-info.java文件中。通过正确设置这些命名空间,可以解决调用过程中的名称冲突和识别问题。
摘要由CSDN通过智能技术生成

前面提到用cxf对.net进行调用时的命名空间的问题,由于当时时间比较紧,没细致地进行总结,这次对这个命名空间进行一个较为细致的总结一下.

有两种类型的命名空间,一是targetNamespace,另外一个是namespace,其实他们都是用来进行名称区分的.targetNamespace一般进行整个wsdl的名称区分,所以一般是在对应的接口中进行声明,比如:

@WebService(targetNamespace= "http://soap.interfaces.ssa.huawei.com")

publicinterface ICorePlat {}

而namespace一般用来对复杂的参数进行命名的,而复杂的参数在java中通常就是bean了,在bean的同一个目录可以建立一个叫package-info.java的类,在该类中通过注解的方式加入namespace,示例如下:

@javax.xml.bind.annotation.XmlSchema(namespace= "http://soap.interfaces.ssa.huawei.com", elementFormDefault =javax.xml.bind.annotation.XmlNsForm.QUALIFIED)

package com.feinno.gdp.promgr.ws.client;

那么如果有多个namespace怎么办呢?这就需要多建几个目录,分别加入package-info.java文件就行了.

这个package-info.java的多少与wsdl文档中的参数类型以及你所需要的调用的接口有关.

比如一个wsdl文档中有10个方法,你可能只需要一个方法,则如果这个方法有复杂的参数,则可能就只需要建立一个package-info.java就行了,而如果都是标准的参数的话,这个就可以不用建立了.

比如针对下面的sendSMS就去,从字面上也看出其是一个复杂的的参数类型,在第一个参数是的type=”s1:InfoHeader”,从这个可以看见,s1指向了另外的一个命名空间,所以需要对InfoHeader这个bean的目录中建立一个package-info.java这样的类文件,将命名空间进行写入即可.

 <

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值