private Message mockMessage( String baseAddress, String pathInfo, String query, List<ClassResourceInfo> cris) throws Exception { Message m = new MessageImpl(); Exchange e = new ExchangeImpl(); e.put(Service.class, new JAXRSServiceImpl(cris)); m.setExchange(e); control.reset(); ServletDestination d = control.createMock(ServletDestination.class); EndpointInfo epr = new EndpointInfo(); epr.setAddress(baseAddress); d.getEndpointInfo(); EasyMock.expectLastCall().andReturn(epr).anyTimes(); Endpoint endpoint = new EndpointImpl(null, null, epr); e.put(Endpoint.class, endpoint); endpoint.put(ServerProviderFactory.class.getName(), ServerProviderFactory.getInstance()); e.setDestination(d); BindingInfo bi = control.createMock(BindingInfo.class); epr.setBinding(bi); bi.getProperties(); EasyMock.expectLastCall().andReturn(Collections.emptyMap()).anyTimes(); m.put(Message.REQUEST_URI, pathInfo); m.put(Message.QUERY_STRING, query); m.put(Message.HTTP_REQUEST_METHOD, "GET"); control.replay(); return m; }
public String getStyle() { SOAPBinding sb = bi.getExtensor(SOAPBinding.class); return (sb == null) ? null : sb.getStyle(); }
public Binding createBinding(BindingInfo binding) { // TODO what about the mix style/use? // The default style should be doc-lit wrapped. String parameterStyle = SoapBindingConstants.PARAMETER_STYLE_WRAPPED; String bindingStyle = SoapBindingConstants.BINDING_STYLE_DOC; boolean hasWrapped = false; org.apache.cxf.binding.soap.SoapBinding sb = null; SoapVersion version = null; if (binding instanceof SoapBindingInfo) { SoapBindingInfo sbi = (SoapBindingInfo) binding; version = sbi.getSoapVersion(); sb = new org.apache.cxf.binding.soap.SoapBinding(binding, version); // Service wide style if (!StringUtils.isEmpty(sbi.getStyle())) { bindingStyle = sbi.getStyle(); } boolean hasRPC = false; boolean hasDoc = false; // Operation wide style, what to do with the mixed style/use? for (BindingOperationInfo boi : sbi.getOperations()) { String st = sbi.getStyle(boi.getOperationInfo()); if (st != null) { bindingStyle = st; if (SoapBindingConstants.BINDING_STYLE_RPC.equalsIgnoreCase(st)) { hasRPC = true; } else { hasDoc = true; } } if (boi.getUnwrappedOperation() == null) { parameterStyle = SoapBindingConstants.PARAMETER_STYLE_BARE; } else { hasWrapped = true; } } if (Boolean.TRUE.equals(binding.getService().getProperty("soap.force.doclit.bare"))) { hasDoc = true; hasRPC = false; parameterStyle = SoapBindingConstants.PARAMETER_STYLE_BARE; bindingStyle = SoapBindingConstants.BINDING_STYLE_DOC; } if (hasRPC && hasDoc) { throw new RuntimeException( "WSI-BP prohibits RPC and Document style " + "operations in same service."); } // jms if (sbi.getTransportURI().equals(SoapJMSConstants.SOAP_JMS_SPECIFICIATION_TRANSPORTID)) { sb.getInInterceptors().add(new SoapJMSInInterceptor()); } } else { throw new RuntimeException( "Can not initialize SoapBinding, BindingInfo is not SoapBindingInfo"); } sb.getOutFaultInterceptors().add(new StaxOutInterceptor()); sb.getOutFaultInterceptors().add(new SoapOutInterceptor(getBus())); sb.getInInterceptors().add(new AttachmentInInterceptor()); sb.getInInterceptors().add(new StaxInInterceptor()); sb.getInInterceptors().add(new SoapActionInInterceptor()); sb.getOutInterceptors().add(new AttachmentOutInterceptor()); sb.getOutInterceptors().add(new StaxOutInterceptor()); sb.getOutInterceptors().add(SoapHeaderOutFilterInterceptor.INSTANCE); if (SoapBindingConstants.BINDING_STYLE_RPC.equalsIgnoreCase(bindingStyle)) { sb.getInInterceptors().add(new RPCInInterceptor()); sb.getOutInterceptors().add(new RPCOutInterceptor()); } else if (SoapBindingConstants.BINDING_STYLE_DOC.equalsIgnoreCase(bindingStyle) && SoapBindingConstants.PARAMETER_STYLE_BARE.equalsIgnoreCase(parameterStyle)) { // sb.getInInterceptors().add(new BareInInterceptor()); sb.getInInterceptors().add(new DocLiteralInInterceptor()); if (hasWrapped) { sb.getOutInterceptors().add(new WrappedOutInterceptor()); } sb.getOutInterceptors().add(new BareOutInterceptor()); } else { // sb.getInInterceptors().add(new WrappedInInterceptor()); sb.getInInterceptors().add(new DocLiteralInInterceptor()); sb.getOutInterceptors().add(new WrappedOutInterceptor()); sb.getOutInterceptors().add(new BareOutInterceptor()); } sb.getInInterceptors().add(new SoapHeaderInterceptor()); sb.getInInterceptors().add(new ReadHeadersInterceptor(getBus(), version)); sb.getInInterceptors().add(new StartBodyInterceptor()); sb.getInInterceptors().add(new CheckFaultInterceptor()); sb.getInInterceptors().add(new MustUnderstandInterceptor()); sb.getOutInterceptors().add(new SoapPreProtocolOutInterceptor()); sb.getOutInterceptors().add(new SoapOutInterceptor(getBus())); sb.getOutFaultInterceptors().add(new SoapOutInterceptor(getBus())); sb.getOutFaultInterceptors().add(SoapHeaderOutFilterInterceptor.INSTANCE); // REVISIT: The phase interceptor chain seems to freak out if this added // first. Not sure what the deal is at the moment, I suspect the // ordering algorithm needs to be improved sb.getInInterceptors().add(new URIMappingInterceptor()); if (version.getVersion() == 1.1) { sb.getInFaultInterceptors().add(new Soap11FaultInInterceptor()); sb.getOutFaultInterceptors().add(new Soap11FaultOutInterceptor()); } else if (version.getVersion() == 1.2) { sb.getInFaultInterceptors().add(new Soap12FaultInInterceptor()); sb.getOutFaultInterceptors().add(new Soap12FaultOutInterceptor()); } if (binding.getService() != null) { for (EndpointInfo ei : binding.getService().getEndpoints()) { if (ei.getAddress() != null && ei.getAddress().startsWith("soap.udp")) { setupUDP(sb, ei); } } } return sb; }