/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.axis2.jaxws.swamtom.server; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import javax.xml.bind.annotation.adapters.HexBinaryAdapter; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import javax.xml.ws.BindingType; import javax.xml.ws.Holder; import javax.jws.WebParam.Mode; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.ParameterStyle; /** * Endpont that is a SOAP 1.1 MTOM Binding * but has an operation (swaAttachment) that passes * SWA attachments * */ @WebService(name="SWAMTOMPortType", serviceName="SWAMTOMService", wsdlLocation="META-INF/swamtomservice.wsdl", targetNamespace="http://swamtomservice.test.org") @BindingType(javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_MTOM_BINDING) public class SWAMTOMPortTypeImpl { /** * This method passes an SWA attachment as a request * and expects an SWA attachment as a response. * Note that the body content in both cases is empty. * (See the wsdl) * @param attachment (swa) * @return attachment (swa) */ @WebMethod(operationName="swaAttachment", action="swaAttachment") @XmlJavaTypeAdapter(HexBinaryAdapter.class) @WebResult(name = "jpegImageResponse", targetNamespace = "", partName = "jpegImageResponse") @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE) public byte[] swaAttachment( @XmlJavaTypeAdapter(HexBinaryAdapter.class) @WebParam(name = "jpegImageRequest", targetNamespace = "", partName = "jpegImageRequest") byte[] attachment) { if (attachment == null || attachment.length == 0){ throw new RuntimeException("Received empty attachment"); } else { // Change the first three characters and return the attachment attachment[0] = 'S'; attachment[1] = 'W'; attachment[2] = 'A'; } return attachment; } /** * This method passes two SWA attachments as a request * and expects two SWA attachments as a response. * Note that the body content in both cases is empty. * (See the wsdl) * @param attachment (swa) * @return attachment (swa) */ @WebMethod(operationName="swaAttachment2", action="swaAttachment2") @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE) public void swaAttachment2( @XmlJavaTypeAdapter(HexBinaryAdapter.class) @WebParam(name = "jpegImage1Request", targetNamespace = "", partName = "jpegImage1Request") byte[] attachment, @XmlJavaTypeAdapter(HexBinaryAdapter.class) @WebParam(name = "jpegImage2Request", targetNamespace = "", partName = "jpegImage2Request") byte[] attachment2, @XmlJavaTypeAdapter(HexBinaryAdapter.class) @WebParam(name = "jpegImage1Response", targetNamespace = "", partName = "jpegImage1Response", mode= Mode.OUT) Holder<byte[]> attachmentOut1, @XmlJavaTypeAdapter(HexBinaryAdapter.class) @WebParam(name = "jpegImage2Response", targetNamespace = "", partName = "jpegImage2Response", mode= Mode.OUT) Holder<byte[]> attachmentOut2) { if (attachment == null || attachment.length == 0){ throw new RuntimeException("Received empty first attachment"); } else if (attachment2 == null || attachment2.length == 0){ throw new RuntimeException("Received empty second attachment"); } else if (attachment[0] != '1') { throw new RuntimeException("First attachment is not '1'"); } else if (attachment2[0] != '2') { throw new RuntimeException("Second attachment is not '2'"); } else { attachmentOut1.value = new byte[1]; attachmentOut1.value[0] = '3'; attachmentOut2.value = new byte[1]; attachmentOut2.value[0] = '4'; } } @WebMethod(operationName="mtomAttachment", action="mtomAttachment") @SOAPBinding(parameterStyle=ParameterStyle.BARE) public void mtomAttachment(Holder<byte[]> message) { byte[] attachment = message.value; if (attachment == null || attachment.length == 0){ throw new RuntimeException("Received empty mtom attachment"); } else { // Change the first characters attachment[0] = 'X'; attachment[1] = 'O'; attachment[2] = 'P'; } message.value = attachment; } }