blob: 57fad74ced9f2a0441b4a2ea3aa2f206d7e60c46 [file] [log] [blame]
/*
* 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;
}
}