/* * SoapUI, Copyright (C) 2004-2016 SmartBear Software * * Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent * versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * * http://ec.europa.eu/idabc/eupl * * Unless required by applicable law or agreed to in writing, software distributed under the Licence is * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the Licence for the specific language governing permissions and limitations * under the Licence. */ package com.eviware.soapui.impl.wsdl.teststeps; import com.eviware.soapui.impl.wsdl.submit.transports.http.HttpResponse; import com.eviware.soapui.impl.wsdl.support.assertions.AssertedXPathsContainer; import com.eviware.soapui.impl.wsdl.teststeps.actions.ShowMessageExchangeAction; import com.eviware.soapui.model.ModelItem; import com.eviware.soapui.model.iface.Attachment; import com.eviware.soapui.model.iface.MessageExchange; import com.eviware.soapui.model.iface.Operation; import com.eviware.soapui.model.testsuite.AssertedXPath; import com.eviware.soapui.model.testsuite.MessageExchangeTestStepResult; import com.eviware.soapui.model.testsuite.ResponseAssertedMessageExchange; import com.eviware.soapui.support.action.swing.ActionList; import com.eviware.soapui.support.types.StringToStringMap; import com.eviware.soapui.support.types.StringToStringsMap; import com.eviware.soapui.support.xml.XmlUtils; import javax.annotation.CheckForNull; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * TestStepResult for a WsdlTestRequestStep * * @author ole.matzura */ public class RestRequestStepResult extends WsdlTestStepResult implements ResponseAssertedMessageExchange, AssertedXPathsContainer, MessageExchangeTestStepResult { private String requestContent; @CheckForNull private HttpResponse response; private String domain; private String username; private String endpoint; private String encoding; private String password; private StringToStringMap properties; private boolean addedAction; private List<AssertedXPath> assertedXPaths; public RestRequestStepResult(HttpTestRequestStepInterface step) { super((WsdlTestStep) step); } @Override public Operation getOperation() { if (response == null) { response = null; } return response == null ? null : response.getRequest().getOperation(); } @Override public ModelItem getModelItem() { if (response != null) { return response.getRequest(); } else { return null; } } @Override public String getRequestContent() { if (isDiscarded()) { return "<discarded>"; } return requestContent; } public void setRequestContent(String requestContent) { this.requestContent = requestContent; } @Override public HttpResponse getResponse() { return response; } @Override public ActionList getActions() { if (!addedAction) { addAction(new ShowMessageExchangeAction(this, "TestStep"), true); addedAction = true; } return super.getActions(); } public void setResponse(HttpResponse response) { this.response = response; } public String getDomain() { return domain; } public void setDomain(String domain) { this.domain = domain; addProperty("Domain", domain); } public void addProperty(String key, String value) { if (properties == null) { properties = new StringToStringMap(); } properties.put(key, value); } public String getEncoding() { return encoding; } public void setEncoding(String encoding) { this.encoding = encoding; addProperty("Encoding", encoding); } @Override public String getEndpoint() { return endpoint; } public void setEndpoint(String endpoint) { this.endpoint = endpoint; addProperty("Endpoint", endpoint); } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; addProperty("Password", password); } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; addProperty("Username", username); } @Override public void discard() { super.discard(); requestContent = null; response = null; properties = null; assertedXPaths = null; } @Override public void writeTo(PrintWriter writer) { super.writeTo(writer); if (response == null) { writer.println("\r\n- missing response / garbage collected -"); return; } writer.println("\r\n----------------- Properties ------------------------------"); if (properties != null) { for (String key : properties.keySet()) { if (properties.get(key) != null) { writer.println(key + ": " + properties.get(key)); } } } writer.println("\r\n---------------- Request ---------------------------"); StringToStringsMap headers = response.getRequestHeaders(); for (Map.Entry<String, List<String>> headerEntry : headers.entrySet()) { if (headerEntry.getValue() != null) { writer.println(headerEntry.getKey() + ": " + headerEntry.getValue()); } } byte[] rawRequestData = response.getRawRequestData(); if (rawRequestData != null) { writer.println("\r\n" + new String(rawRequestData)); } writer.println("\r\n---------------- Response --------------------------"); headers = response.getResponseHeaders(); for (String key : headers.keySet()) { if (headers.get(key) != null) { writer.println(key + ": " + headers.get(key)); } } String respContent = response.getContentAsString(); if (respContent != null) { writer.println("\r\n" + respContent); } } @Override public StringToStringMap getProperties() { return properties; } @Override public String getProperty(String name) { return properties == null ? null : properties.get(name); } @Override public Attachment[] getRequestAttachments() { if (response == null || response.getRequest() == null) { return new Attachment[0]; } return response.getRequest().getAttachments(); } @Override public StringToStringsMap getRequestHeaders() { if (response == null) { return null; } return response.getRequestHeaders(); } @Override public Attachment[] getResponseAttachments() { if (response == null) { return new Attachment[0]; } return response.getAttachments(); } @Override public String getResponseContent() { if (isDiscarded()) { return "<discarded>"; } if (response == null) { return "<missing response>"; } return response.getContentAsString(); } @Override public String getRequestContentAsXml() { return XmlUtils.seemsToBeXml(requestContent) ? requestContent : "<not-xml/>"; } @Override public String getResponseContentAsXml() { if (response == null) { return null; } return response.getContentAsXml(); } @Override public StringToStringsMap getResponseHeaders() { if (response == null) { return new StringToStringsMap(); } return response.getResponseHeaders(); } @Override public long getTimestamp() { if (isDiscarded() || response == null) { return -1; } return response.getTimestamp(); } @Override public AssertedXPath[] getAssertedXPathsForResponse() { return assertedXPaths == null ? new AssertedXPath[0] : assertedXPaths.toArray(new AssertedXPath[assertedXPaths .size()]); } @Override public void addAssertedXPath(AssertedXPath assertedXPath) { if (assertedXPaths == null) { assertedXPaths = new ArrayList<AssertedXPath>(); } assertedXPaths.add(assertedXPath); } @Override public MessageExchange[] getMessageExchanges() { return new MessageExchange[]{this}; } @Override public byte[] getRawRequestData() { return response.getRawRequestData(); } @Override public byte[] getRawResponseData() { return response.getRawResponseData(); } @Override public Attachment[] getRequestAttachmentsForPart(String partName) { return null; } @Override public Attachment[] getResponseAttachmentsForPart(String partName) { return null; } @Override public boolean hasRawData() { return getRawResponseData() != null || getRawRequestData() != null; } @Override public boolean hasRequest(boolean b) { return true; } @Override public boolean hasResponse() { return response != null; } }