我有一个Web服务,我试图使用以下客户端代码调用它:
import com.test.wsdl.CxfAdd;
import com.test.wsdl.CxfAddService;
import java.util.Map;
import javax.xml.ws.BindingProvider;
import org.apache.cxf.ws.addressing.AddressingProperties;
import org.apache.cxf.ws.addressing.AttributedURIType;
import org.apache.cxf.ws.addressing.EndpointReferenceType;
import org.apache.cxf.ws.addressing.JAXWSAConstants;
public class Main {
public static void main(String[] args) {
CxfAddService service = new CxfAddService();
CxfAdd client = service.getCxfAddPort();
Map<String, Object> requestContext = ((BindingProvider)client).getRequestContext();
AddressingProperties maps = new AddressingProperties();
EndpointReferenceType ref = new EndpointReferenceType();
AttributedURIType add = new AttributedURIType();
add.setValue("http://www.w3.org/2005/08/addressing/anonymous");
ref.setAddress(add);
maps.setReplyTo(ref);
maps.setFaultTo(ref);
requestContext.put(JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES, maps);
client.myMethodOneWay("Input message");
}
}
在服务器端(Tomcat),webservice实现如下:
CxfAdd。java:
package com.test.ws;
import javax.jws.Oneway;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.soap.Addressing;
@WebService(targetNamespace = "http://test.com/wsdl")
@Addressing(enabled = true, required = true)
public interface CxfAdd {
@WebResult(name = "response")
public abstract String myMethod(String message);
@WebResult(name="response")
@Oneway
public void myMethodOneWay(String message);
}
CxfAddImpl。java:
package com.test.ws;
import javax.annotation.Resource;
import javax.jws.Oneway;
import javax.jws.WebService;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.soap.Addressing;
@WebService
@Addressing
public class CxfAddImpl implements CxfAdd {
@Resource
WebServiceContext webServiceContext;
public String myMethod(String message) {
System.out.println("Invoking sayHello in " + getClass());
return "Hello " + message;
}
@Oneway
public void myMethodOneWay(String message) {
// TODO Auto-generated method stub
}
}
但是,当我运行客户端代码时,在服务器端我得到以下错误:
INFO: Inbound Message
----------------------------
ID: 46
Address: http://localhost:8080/CxfAddressingServer/services/cxfadd
Encoding: UTF-8
Http-Method: POST
Content-Type: text/xml; charset=UTF-8
Headers: {Accept=[*/*], cache-control=[no-cache], connection=[keep-alive], Content-Length=[211], content-type=[text/xml; charset=UTF-8], host=[localhost:8080], pragma=[no-cache], SOAPAction=[""], user-agent=[Apache CXF 3.1.3]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:myMethodOneWay xmlns:ns2="http://test.com/wsdl"><arg0>Input message</arg0></ns2:myMethodOneWay></soap:Body></soap:Envelope>
--------------------------------------
Out 30, 2015 7:18:56 PM org.apache.cxf.ws.addressing.ContextUtils retrieveMAPs
WARNING: WS-Addressing - failed to retrieve Message Addressing Properties from context
似乎我没有发送ws-addressing属性,有人能帮我找出代码中的错误或缺失吗?非常感谢。
在客户端代码中,我替换了以下内容:
CxfAdd client = service.getCxfAddPort();
具有以下功能:
CxfAdd client = service.getCxfAddPort(
new org.apache.cxf.ws.addressing.WSAddressingFeature());
现在它可以工作了。
解决方案是由这里的其他人提供的:
http://www.coderanch.com/t/657413/Web-Services/java/CXF-Client-WS-Addressing-attributes
我正在使用cxf作为带有WS-寻址的apache骆驼路由中的生产者。我知道可以通过(例如可能是错误的)在路由中设置SoapAction Header WS-Addressing操作字段是否也可以这样做?因为我注意到它发送的值错误。我需要输入两个WS-Addressing操作值,并在驼峰路线中决定使用哪一个。
问题:CXF能否基于WS-SecurityPolicy文件自动为客户端配置WS-Security? 如果是的话,是否有任何关于实际这样做的文件?我花了几个小时查看CXF站点并进行搜索,但没有找到答案。 CXF留档显示“CXF 2.2引入了对使用WS-SecurityPolicy配置WSS4J的支持,而不是WS-Security页面上记录的自定义配置”,并且还显示“在CXF 2.2中,如果cxf-r
问题内容: 所有,我都试图编写一个在Axis2.1.5中调用Web Service客户端的Junit测试,而对于如何准确地将其设置为使用WS- Addressing感到困惑。 我已经使用wsdl2java生成了一个客户端存根,并且正在使用axis2二进制发行版中的axis2.xml和模块存储库。 我知道我需要使用WS-Addressing的MemberSubmission版本,并且我 认为 我已经
我有一个问题:我们正在尝试用Apache CXF实现WS-Addressing。我可以设置一些标题,如to或Action,但无法设置其他标题,如From、ReplyTo或FaultTo。 有人知道怎么做吗?
是否可以将WS-Addressing与解耦的endpoint一起使用,但不使用Jetty,只使用ServletDestination? 我得到了以下异常,并且我的SOAP标头包含任何错误的回复To地址: 有效载荷: 有人有线索吗?
我试图用Apache CXF 2.7.18实现WS-Addressing。我可以设置一些标题,如to、Action等。。但我想从SOAP请求中删除ReplyTo 有人知道怎么做吗?