java soap自定义对象_java – 自定义SOAP响应的JAX-WS前缀

目标

我正在实施一个相当旧的(但可悲的是不可更改的)界面的Web服务.我有一个问题,呼叫我的服务的客户端希望在SOAP响应中有一个命名空间,并且我很难改变它来匹配.

考虑到一个你好世界的例子,我想要这样:

Hello Catchwa!

看起来像这样:

Hello Catchwa!

我发现类似于我要做的事情here,但我遇到了类似的代码执行正常的麻烦. (我想坚持使用Metro,而不必更改为cxf或axis)

执行

import com.sun.xml.bind.api.JAXBRIContext;

import com.sun.xml.bind.api.TypeReference;

import com.sun.xml.ws.api.model.SEIModel;

import com.sun.xml.ws.developer.JAXBContextFactory;

import java.util.ArrayList;

import java.util.List;

import javax.xml.bind.JAXBException;

import javax.xml.namespace.QName;

public class HelloJaxbContext implements JAXBContextFactory

{

@Override

public JAXBRIContext createJAXBContext(SEIModel seim, List classesToBind, List typeReferences) throws JAXBException {

List classList = new ArrayList();

classList.addAll(classesToBind);

List refList = new ArrayList();

for (TypeReference tr : typeReferences) {

refList.add(new TypeReference(new QName(tr.tagName.getNamespaceURI(), tr.tagName.getLocalPart(), "customns"), tr.type, tr.annotations));

}

return JAXBRIContext.newInstance(classList.toArray(new Class[classList.size()]), refList, null, seim.getTargetNamespace(), false, null);

}

}

Web服务的一些测试代码是简单的:

import com.sun.xml.ws.developer.UsesJAXBContext;

import javax.jws.WebService;

import javax.jws.WebMethod;

import javax.jws.WebParam;

@WebService(serviceName = "Hello")

@UsesJAXBContext(value = HelloJaxbContext.class)

public class Hello

{

@WebMethod(operationName = "hello")

public String hello(@WebParam(name = "name") String txt)

{

return "Hello " + txt + "!";

}

}

问题

在Tomcat 7.0.32和Glassfish 3.1.2中,使用jaxws-rt 2.2.7(从Maven),上述代码不会影响我的Web服务输出(命名空间前缀仍然是“ns2”).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值