精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-10-29
由于项目需求,服务端使用CXF建一个WebService,但客户端是C#与PHP的。 由于C#或者PHP都通过WSDL文件,来反射生成调用代码,因此要求在生成的WSDL中带WS-SECURITY的信息。但CXF默认生成的都没带该部分信息。 google一天了,都没有看到怎么做的例子。 请问这里有人知道吗? 我希望生成的WDSL如:http://lists.w3.org/Archives/Public/www-ws-desc/2005Jan/att-0094/soap-header-blocks.html <?xml version="1.0"?> <wsdl:description name="StockQuote" xmlns:wsdl="http://www.w3.org/@@@@/@@/wsdl" targetNamespace="http://example.com/stockquote" xmlns:tns="http://example.com/stockquote" xmlns:wsoap="http://www.w3.org/@@@@/@@/wsdl/soap" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <wsdl:types> <xs:schema targetNamespace="http://example.com/stockquote" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:import namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" schemaLocation="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"/> <xs:element name="TradePriceRequest"> <xs:complexType> <xs:all> <xs:element name="tickerSymbol" type="xs:string"/> </xs:all> </xs:complexType> </xs:element> <xs:element name="TradePrice"> <xs:complexType> <xs:all> <xs:element name="price" type="xs:float"/> </xs:all> </xs:complexType> </xs:element> <xs:complexType name="myHeaders"> <xs:sequence> <xs:element ref="wsse:Security" wsoap:mustUnderstand="true"/> <xs:element name="isGoldClubMember" type="xs:boolean" wsoap:mustUnderstand="true"/> <xs:element name="promotionalCode" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:schema> </wsdl:types> <wsdl:interface name="StockQuoteInterface"> <wsdl:operation name="GetLastTradePrice" pattern="http://www.w3.org/@@@@/@@/wsdl/in-out"> <wsdl:input element="tns:GetLastTradePriceInput"/> <wsdl:output element="tns:GetLastTradePriceOutput"/> </wsdl:operation> </wsdl:interface> <wsdl:binding name="StockQuoteSoapBinding" interface="tns:StockQuoteInterface" type="http://www.w3.org/@@@@/@@/wsdl/soap" wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP/"> <wsdl:operation ref="tns:GetLastTradePrice" wsoap:action="http://example.com/GetLastTradePrice"> <wsdl:input wsoap:headerDescription="tns:myHeaders"/> <wsdl:output wsoap:headerDescription="tns:myHeaders"/> </wsdl:operation> </wsdl:binding> <wsdl:service name="StockQuoteService" interface="tns:StockQuoteInterface"> <wsdl:documentation>My first service</wsdl:documentation> <wsdl:endpoint name="StockQuoteEndPoint" binding="tns:StockQuoteBinding" address="http://example.com/endpoint/stockquote"/> </wsdl:service> </wsdl:description> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-10-30
楼主可以参照http://lylhelin.iteye.com/blog/773221 这份博客,希望对你有帮助。
|
|
返回顶楼 | |
发表时间:2012-10-30
liuwuhen 写道 楼主可以参照http://lylhelin.iteye.com/blog/773221 这份博客,希望对你有帮助。 谢谢。 这个博客的内容我看过了,但该博客中wsdl文件是由自己编译完发布出来的。 而我希望的是cxf自动生成的wsdl文件中,就包含ws-security的内容。 |
|
返回顶楼 | |
发表时间:2012-10-30
哦,这样的话,楼主可以去cxf官方网站上看看,有没有这方面的资料。
|
|
返回顶楼 | |
发表时间:2012-10-30
liuwuhen 写道 哦,这样的话,楼主可以去cxf官方网站上看看,有没有这方面的资料。 还在研读之中。 有人说这样可以,继续测试。 @WebParam(partName = "credentialSoapHeader", mode = WebParam.Mode.INOUT, name = "CredentialSoapHeader", targetNamespace = "http://service.ztc.dw.com/", header = true) |
|
返回顶楼 | |
发表时间:2012-10-30
最后修改:2012-10-30
CXF官方的解释:
List<Header> headers = new ArrayList<Header>(); Header dummyHeader = new Header(new QName("uri:org.apache.cxf", "dummy"), "decapitated", new JAXBDataBinding(String.class)); headers.add(dummyHeader); //server side: context.getMessageContext().put(Header.HEADER_LIST, headers); //client side: ((BindingProvider)proxy).getRequestContext().put(Header.HEADER_LIST, headers); |
|
返回顶楼 | |
发表时间:2012-10-30
Soap开发WS貌似有两种方法,一般情况下如CXF以及axis之类的应该是有发布添加WS-secirity的方式的,官网上应该有,PS 本人CXF下只做过基础项目,没有玩过有添加安全选项的部分。另外,cxf发布有两种方式,一种Object first,也就是普通的方式,还有一种是WSDLfirst,就是你自己编写WSDL文档然后发布,如果万一不行,你可以自己编写wsdl文档,然后发布。
|
|
返回顶楼 | |
发表时间:2012-10-31
ieanwfg201 写道 Soap开发WS貌似有两种方法,一般情况下如CXF以及axis之类的应该是有发布添加WS-secirity的方式的,官网上应该有,PS 本人CXF下只做过基础项目,没有玩过有添加安全选项的部分。另外,cxf发布有两种方式,一种Object first,也就是普通的方式,还有一种是WSDLfirst,就是你自己编写WSDL文档然后发布,如果万一不行,你可以自己编写wsdl文档,然后发布。 通过java first(就您说的object first)的方式,还是没有找到相关的解决方法。 我现在通过wsdl first的方法,来解决这个问题。 谢谢啦。 |
|
返回顶楼 | |
发表时间:2012-11-13
楼主不的问题解决了没。
|
|
返回顶楼 | |
发表时间:2012-11-13
目前soap服务端使用签名作为参数传过做校验。
WS-SECURITY做好还真不容易 |
|
返回顶楼 | |