2 * ============LICENSE_START========================================================================
\r
3 * ONAP : tr-069-adapter
\r
4 * =================================================================================================
\r
5 * Copyright (C) 2020 CommScope Inc Intellectual Property.
\r
6 * =================================================================================================
\r
7 * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,
\r
8 * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You
\r
9 * may obtain a copy of the License at
\r
11 * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
\r
14 * either express or implied. See the License for the specific language governing permissions and
\r
15 * limitations under the License.
\r
16 * ===============LICENSE_END=======================================================================
\r
19 package org.commscope.tr069adapter.acs.cpe.rpc;
\r
21 import java.io.ByteArrayInputStream;
\r
22 import java.io.IOException;
\r
23 import java.io.OutputStream;
\r
24 import java.util.ArrayList;
\r
25 import java.util.Iterator;
\r
27 import javax.xml.soap.Detail;
\r
28 import javax.xml.soap.MessageFactory;
\r
29 import javax.xml.soap.SOAPBodyElement;
\r
30 import javax.xml.soap.SOAPElement;
\r
31 import javax.xml.soap.SOAPException;
\r
32 import javax.xml.soap.SOAPFactory;
\r
33 import javax.xml.soap.SOAPFault;
\r
34 import javax.xml.soap.SOAPHeaderElement;
\r
35 import javax.xml.soap.SOAPMessage;
\r
37 import org.commscope.tr069adapter.acs.cpe.TR069RPC;
\r
39 public class Fault extends TR069RPC {
\r
40 private static final String FAULTSTRING = "FaultString";
\r
41 private static final String FAULTCODE = "FaultCode";
\r
42 private static final String FAULT_RPC = "Fault";
\r
43 private static final long serialVersionUID = 1L;
\r
49 public Fault(String soapFaultCode, String soapFaultString, String id) {
\r
51 this.faultCodeCwmp = this.soapFaultCode = soapFaultCode;
\r
52 this.faultStringCwmp = this.soapFaultString = soapFaultString;
\r
57 public void writeTo(OutputStream out) {
\r
59 MessageFactory mf = MessageFactory.newInstance();
\r
60 SOAPFactory spf = SOAPFactory.newInstance();
\r
62 String s = "<soapenv:Envelope";
\r
63 s += " xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"";
\r
64 s += " xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\"";
\r
65 s += " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"";
\r
66 s += " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"";
\r
67 s += " xmlns:cwmp=\"" + urnCWMP
\r
68 + "\"><soapenv:Header></soapenv:Header><soapenv:Body></soapenv:Body></soapenv:Envelope>";
\r
69 ByteArrayInputStream in = new ByteArrayInputStream(s.getBytes());
\r
70 SOAPMessage msg = mf.createMessage(null, in);
\r
72 SOAPHeaderElement elmntId =
\r
73 msg.getSOAPHeader().addHeaderElement(spf.createName("ID", CWMP, urnCWMP));
\r
74 elmntId.setValue(getId());
\r
75 elmntId.setAttribute("soapenv:mustUnderstand", "1");
\r
76 SOAPFault fault = msg.getSOAPBody().addFault();
\r
77 fault.addChildElement(spf.createName("faultcode")).setValue(String.valueOf("Server"));
\r
78 fault.addChildElement(spf.createName("faultstring")).setValue(String.valueOf("CWMP Fault"));
\r
80 if (name == null || name.equals("")) {
\r
81 name = this.getClass().getSimpleName();
\r
84 } catch (SOAPException ex) {
\r
85 logger.error("Exception : {}", ex.getMessage());
\r
86 } catch (IOException e) {
\r
87 logger.error("Exception : {}", e.getMessage());
\r
92 protected void createBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {
\r
93 logger.isDebugEnabled();
\r
96 protected void createBody(Detail body, SOAPFactory spf) throws SOAPException {
\r
98 SOAPElement element = spf.createElement(FAULT_RPC, CWMP, urnCWMP);
\r
99 element.addChildElement(spf.createName(FAULTCODE)).setValue(String.valueOf(this.faultCodeCwmp));
\r
100 element.addChildElement(spf.createName(FAULTSTRING))
\r
101 .setValue(String.valueOf(this.faultStringCwmp));
\r
102 body.addChildElement(element);
\r
105 protected void parseBody(SOAPBodyElement body, SOAPFactory spf) throws SOAPException {
\r
107 soapFaultCode = getRequestElement(spf, body, "faultcode");
\r
108 } catch (Exception e) {
\r
109 logger.error("Exception while parseBody faultcode {}", e.toString());
\r
112 soapFaultString = getRequestElement(spf, body, "faultstring");
\r
113 } catch (Exception e) {
\r
114 logger.error("Exception while parseBody faultstring {}", e.toString());
\r
116 SOAPElement detail = null;
\r
118 detail = getRequestChildElement(spf, body, "detail");
\r
119 } catch (Exception e) {
\r
120 logger.error("Exception while parseBody detail {}", e.toString());
\r
122 if (detail == null) {
\r
123 detail = body; // for one broken cpe
\r
125 SOAPElement cwmpfault = getRequestChildElement2(spf, detail, FAULT_RPC);
\r
126 faultCodeCwmp = getRequestElement(spf, cwmpfault, FAULTCODE);
\r
127 faultStringCwmp = getRequestElement(spf, cwmpfault, FAULTSTRING);
\r
129 Iterator<?> i = cwmpfault.getChildElements(spf.createName("SetParameterValuesFault"));
\r
131 setParameterValuesFaults = new ArrayList<>();
\r
133 while (i.hasNext()) {
\r
134 SOAPElement f = (SOAPElement) i.next();
\r
135 SetParameterValueFault vf =
\r
136 new SetParameterValueFault(getRequestElement(spf, f, "ParameterName"),
\r
137 getRequestElement(spf, f, FAULTCODE), getRequestElement(spf, f, FAULTSTRING));
\r
138 setParameterValuesFaults.add(vf);
\r
140 if (setParameterValuesFaults != null) {
\r
141 for (SetParameterValueFault f : setParameterValuesFaults) {
\r
142 logger.error("n={} c={} s={}", f.getParameterName(), f.getFaultCode(), f.getFaultString());
\r
148 public String toString() {
\r
149 return "FAULT: code=" + soapFaultCode + " msg=" + soapFaultString + " code=" + faultCodeCwmp
\r
150 + " cmsg=" + faultStringCwmp;
\r
153 private String soapFaultCode;
\r
154 private String soapFaultString;
\r
155 private String faultCodeCwmp;
\r
156 private String faultStringCwmp;
\r
157 private ArrayList<SetParameterValueFault> setParameterValuesFaults;
\r
159 public String getFaultString() {
\r
160 return soapFaultString;
\r
163 public String getFaultStringCwmp() {
\r
164 return faultStringCwmp;
\r
167 public String getFaultCode() {
\r
168 return soapFaultCode;
\r
171 public String getCwmpFaultCode() {
\r
172 return faultCodeCwmp;
\r
175 public static final String FCODE_REQUEST_DENIED = "9001";
\r
176 public static final String FCODE_INTERNAL = "9002";
\r
177 public static final String FCODE_INVALID_ARGS = "9003";
\r
178 public static final String FCODE_RESOURCE_EXCEEDED = "9004";
\r
179 public static final String FCODE_INVALID_PARAMETER_NAME = "9005";
\r
180 public static final String FCODE_INVALID_PARAMETER_TYPE = "9006";
\r
181 public static final String FCODE_INVALID_PARAMETER_VALUE = "9007";
\r
182 public static final String FCODE_PARAMETER_READONLY = "9008";
\r
183 public static final String FCODE_NOTIFICATION_REJECTED = "9009";
\r
184 public static final String FCODE_DOWNLOAD_FAILURE = "9010";
\r
185 public static final String FCODE_UPLOAD_FAILURE = "9011";
\r
186 public static final String FCODE_FILE_TRANSFER_AUTHENTICATION_FAILURE = "9012";
\r
187 public static final String FCODE_PROTOCOL_NOT_SUPPORTED = "9013";
\r
188 public static final String FCODE_DLF_MULTICAST = "9014";
\r
189 public static final String FCODE_DLF_NO_CONTACT = "9015";
\r
190 public static final String FCODE_DLF_FILE_ACCESS = "9016";
\r
191 public static final String FCODE_DLF_UNABLE_TO_COMPLETE = "9017";
\r
192 public static final String FCODE_DLF_FILE_CORRUPTED = "9018";
\r
193 public static final String FCODE_DLF_FILE_AUTHENTICATION = "9019";
\r
194 public static final String FCODE_ACS_METHOD_NOT_SUPPORTED = "8000";
\r
195 public static final String FCODE_ACS_REQUEST_DENIED = "8001";
\r
196 public static final String FCODE_ACS_INTERNAL_ERROR = "8002";
\r
197 public static final String FCODE_ACS_INVALID_ARGS = "8003";
\r
198 public static final String FCODE_ACS_RESOURCE_EXCEEDED = "8004";
\r
199 public static final String FCODE_ACS_RETRY = "8005";
\r